Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeValueConverter.cs @ 17284

Last change on this file since 17284 was 17284, checked in by dpiringe, 3 years ago

#3026: renamed namespace and project from HeuristicLab.Manufacture to HeuristicLab.JsonInterface

File size: 2.4 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.JsonInterface {
10  public class ValueTypeValueConverter<ValueType, T> : BaseConverter
11    where ValueType : ValueTypeValue<T>
12    where T : struct {
13
14    public override void InjectData(IItem item, JsonItem data) =>
15      item.Cast<ValueType>().Value = CastValue<T>(data.Default);
16
17    public override JsonItem ExtractData(IItem value) =>
18      new JsonItem() {
19        Default = value.Cast<ValueType>().Value,
20        Range = new object[] { GetMinValue(), GetMaxValue() }
21      };
22
23    #region Helper
24    private object GetMaxValue() {
25      TypeCode typeCode = Type.GetTypeCode(typeof(T));
26
27      if (typeof(ValueType).IsEqualTo(typeof(PercentValue)))
28        return 1.0d;
29
30      switch (typeCode) {
31        case TypeCode.Int16: return Int16.MaxValue;
32        case TypeCode.Int32: return Int32.MaxValue;
33        case TypeCode.Int64: return Int64.MaxValue;
34        case TypeCode.UInt16: return UInt16.MaxValue;
35        case TypeCode.UInt32: return UInt32.MaxValue;
36        case TypeCode.UInt64: return UInt64.MaxValue;
37        case TypeCode.Single: return Single.MaxValue;
38        case TypeCode.Double: return Double.MaxValue;
39        case TypeCode.Decimal: return Decimal.MaxValue;
40        case TypeCode.Byte: return Byte.MaxValue;
41        case TypeCode.Boolean: return true;
42        default: return default(T);
43      }
44    }
45
46    private object GetMinValue() {
47      TypeCode typeCode = Type.GetTypeCode(typeof(T));
48
49      if (typeof(ValueType).IsEqualTo(typeof(PercentValue)))
50        return 0.0d;
51
52      switch (typeCode) {
53        case TypeCode.Int16: return Int16.MinValue;
54        case TypeCode.Int32: return Int32.MinValue;
55        case TypeCode.Int64: return Int64.MinValue;
56        case TypeCode.UInt16: return UInt16.MinValue;
57        case TypeCode.UInt32: return UInt32.MinValue;
58        case TypeCode.UInt64: return UInt64.MinValue;
59        case TypeCode.Single: return Single.MinValue;
60        case TypeCode.Double: return Double.MinValue;
61        case TypeCode.Decimal: return Decimal.MinValue;
62        case TypeCode.Byte: return Byte.MinValue;
63        case TypeCode.Boolean: return false;
64        default: return default(T);
65      }
66    }
67    #endregion
68  }
69}
Note: See TracBrowser for help on using the repository browser.