1 | using System;
|
---|
2 | using System.Collections.Generic;
|
---|
3 | using System.Linq;
|
---|
4 | using System.Text;
|
---|
5 | using System.Threading.Tasks;
|
---|
6 | using HeuristicLab.Core;
|
---|
7 | using HeuristicLab.Data;
|
---|
8 |
|
---|
9 | namespace ParameterTest {
|
---|
10 | public class ValueTypeValueTransformer<ValueType, T> : BaseTransformer
|
---|
11 | where ValueType : ValueTypeValue<T>
|
---|
12 | where T : struct {
|
---|
13 | public override IItem FromData(ParameterData obj, Type targetType) =>
|
---|
14 | //item.Cast<ValueType>().Value = CastValue<T>(obj.Default);
|
---|
15 | Instantiate<ValueType>(CastValue<T>(obj.Default));
|
---|
16 | public override void SetValue(IItem item, ParameterData data) =>
|
---|
17 | item.Cast<ValueType>().Value = CastValue<T>(data.Default);
|
---|
18 |
|
---|
19 | public override ParameterData ToData(IItem value) {
|
---|
20 | ParameterData data = base.ToData(value);
|
---|
21 | data.Default = value.Cast<ValueType>().Value;
|
---|
22 | data.Range = new object[] { default(T), GetMaxValue() };
|
---|
23 | return data;
|
---|
24 | }
|
---|
25 |
|
---|
26 | private object GetMaxValue() {
|
---|
27 | TypeCode typeCode = Type.GetTypeCode(typeof(T));
|
---|
28 | switch (typeCode) {
|
---|
29 | case TypeCode.Int16: return Int16.MaxValue;
|
---|
30 | case TypeCode.Int32: return Int32.MaxValue;
|
---|
31 | case TypeCode.Int64: return Int64.MaxValue;
|
---|
32 | case TypeCode.UInt16: return UInt16.MaxValue;
|
---|
33 | case TypeCode.UInt32: return UInt32.MaxValue;
|
---|
34 | case TypeCode.UInt64: return UInt64.MaxValue;
|
---|
35 | case TypeCode.Single: return Single.MaxValue;
|
---|
36 | case TypeCode.Double: return Double.MaxValue;
|
---|
37 | case TypeCode.Decimal: return Decimal.MaxValue;
|
---|
38 | case TypeCode.Byte: return Byte.MaxValue;
|
---|
39 | case TypeCode.Boolean: return true;
|
---|
40 | default: return default(T);
|
---|
41 | }
|
---|
42 | }
|
---|
43 | }
|
---|
44 | }
|
---|