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 Inject(IItem item, IJsonItem data, IJsonItemConverter root) =>
|
---|
37 | CopyArrayData(((ArrayType)item), CastValue<T[]>(data.Value));
|
---|
38 |
|
---|
39 | public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
|
---|
40 | new JsonItem() {
|
---|
41 | Name = "[OverridableParamName]",
|
---|
42 | Value = ((ArrayType)value).CloneAsArray()
|
---|
43 | };
|
---|
44 |
|
---|
45 | #region Helper
|
---|
46 | private void CopyArrayData(ArrayType array, T[] data) {
|
---|
47 | var colInfo = array.GetType().GetProperty("Length");
|
---|
48 | colInfo.SetValue(array, data.Length);
|
---|
49 | for (int i = 0; i < data.Length; ++i) {
|
---|
50 | array[i] = data[i];
|
---|
51 | }
|
---|
52 | }
|
---|
53 | #endregion
|
---|
54 | }
|
---|
55 | }
|
---|