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 | using Newtonsoft.Json.Linq;
|
---|
9 |
|
---|
10 | namespace HeuristicLab.JsonInterface {
|
---|
11 |
|
---|
12 | public class IntArrayConverter : ValueTypeArrayConverter<IntArray, int> {
|
---|
13 | public override int Priority => 1;
|
---|
14 | public override Type ConvertableType => typeof(IntArray);
|
---|
15 | }
|
---|
16 |
|
---|
17 | public class DoubleArrayConverter : ValueTypeArrayConverter<DoubleArray, double> {
|
---|
18 | public override int Priority => 1;
|
---|
19 | public override Type ConvertableType => typeof(DoubleArray);
|
---|
20 | }
|
---|
21 |
|
---|
22 | public class PercentArrayConverter : ValueTypeArrayConverter<PercentArray, double> {
|
---|
23 | public override int Priority => 2;
|
---|
24 | public override Type ConvertableType => typeof(PercentArray);
|
---|
25 | }
|
---|
26 |
|
---|
27 | public class BoolArrayConverter : ValueTypeArrayConverter<BoolArray, bool> {
|
---|
28 | public override int Priority => 1;
|
---|
29 | public override Type ConvertableType => typeof(BoolArray);
|
---|
30 | }
|
---|
31 |
|
---|
32 | public abstract class ValueTypeArrayConverter<ArrayType, T> : BaseConverter
|
---|
33 | where ArrayType : ValueTypeArray<T>
|
---|
34 | where T : struct
|
---|
35 | {
|
---|
36 | public override void InjectData(IItem item, JsonItem data, IJsonItemConverter root) =>
|
---|
37 | CopyArrayData(((ArrayType)item), CastValue<T[]>(data.Value));
|
---|
38 |
|
---|
39 | public override void Populate(IItem value, JsonItem item, IJsonItemConverter root) {
|
---|
40 | item.Name = "[OverridableParamName]";
|
---|
41 | item.Value = ((ArrayType)value).CloneAsArray();
|
---|
42 | }
|
---|
43 |
|
---|
44 | #region Helper
|
---|
45 | private void CopyArrayData(ArrayType array, T[] data) {
|
---|
46 | var colInfo = array.GetType().GetProperty("Length");
|
---|
47 | colInfo.SetValue(array, data.Length);
|
---|
48 | for (int i = 0; i < data.Length; ++i) {
|
---|
49 | array[i] = data[i];
|
---|
50 | }
|
---|
51 | }
|
---|
52 | #endregion
|
---|
53 | }
|
---|
54 | }
|
---|