Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Transformer.cs @ 17266

Last change on this file since 17266 was 17266, checked in by dpiringe, 5 years ago

#3026:

  • changed the namespace from ParameterTest to HeuristicLab.Manufacture
  • added an extension method for Type to get the distance of an interface based on the target type
  • renamed methods ToData, SetValue to Extract, Inject
  • new implementation of the template generation with transformers (not the final name)
  • started to use the new transformers for the instantiation of IOptimizer-objects (out of a template)
  • new transformers: LookupParameterTransformer and DummyTransformer
File size: 3.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using HeuristicLab.Core;
7using HeuristicLab.Data;
8
9namespace HeuristicLab.Manufacture {
10  public static class Transformer {
11    private static IDictionary<Type, ITypeTransformer> transformers = new Dictionary<Type, ITypeTransformer>();
12   
13    public static void Register(Type type, ITypeTransformer transformer) {
14      if(!transformers.ContainsKey(type))
15        transformers.Add(type, transformer);
16    }
17
18
19    public static void Register<T>(ITypeTransformer transformer) => Register(typeof(T), transformer);
20
21    public static ITypeTransformer Get(Type type) {
22      IList<KeyValuePair<Type, ITypeTransformer>> possibleTransformers = new List<KeyValuePair<Type, ITypeTransformer>>();
23      foreach (var x in transformers) {
24        if (type.IsEqualTo(x.Key))
25          possibleTransformers.Add(x);
26      }
27
28      if(possibleTransformers.Count > 0) {
29        ITypeTransformer nearest = possibleTransformers.First().Value;
30        int nearestDistance = -1;
31        foreach (var x in possibleTransformers) {
32          int d = type.GetInterfaceDistance(x.Key);
33          if (d != -1 && (nearestDistance == -1 || d < nearestDistance)) {
34            nearestDistance = d;
35            nearest = x.Value;
36          }
37        }
38        return nearest;
39      }
40      return new DummyTransformer();
41    }
42
43    internal static void Inject(IItem item, ParameterData data) {
44      Get(item.GetType()).Inject(item, data);
45    }
46
47    internal static ParameterData Extract(IItem item) {
48      return Get(item.GetType()).Extract(item);
49    }
50
51
52    static Transformer() {
53      Register<IntValue>(new ValueTypeValueTransformer<IntValue, int>());
54      Register<DoubleValue>(new ValueTypeValueTransformer<DoubleValue, double>());
55      Register<PercentValue>(new ValueTypeValueTransformer<PercentValue, double>());
56      Register<BoolValue>(new ValueTypeValueTransformer<BoolValue, bool>());
57      Register<DateTimeValue>(new ValueTypeValueTransformer<DateTimeValue, DateTime>());
58      Register<StringValue>(new StringValueTransformer());
59
60      Register<IntArray>(new ValueTypeArrayTransformer<IntArray, int>());
61      Register<DoubleArray>(new ValueTypeArrayTransformer<DoubleArray, double>());
62      Register<PercentArray>(new ValueTypeArrayTransformer<PercentArray, double>());
63      Register<BoolArray>(new ValueTypeArrayTransformer<BoolArray, bool>());
64
65      Register<IntMatrix>(new ValueTypeMatrixTransformer<IntMatrix, int>());
66      Register<DoubleMatrix>(new ValueTypeMatrixTransformer<DoubleMatrix, double>());
67      Register<PercentMatrix>(new ValueTypeMatrixTransformer<PercentMatrix, double>());
68      Register<BoolMatrix>(new ValueTypeMatrixTransformer<BoolMatrix, bool>());
69
70      Register(typeof(IConstrainedValueParameter<>), new ConstrainedValueParameterTransformer());
71      Register(typeof(ILookupParameter), new LookupParameterTransformer());
72      Register(typeof(IValueParameter), new ValueParameterTransformer());
73    }
74
75  }
76}
Note: See TracBrowser for help on using the repository browser.