Changeset 17417 for branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs
- Timestamp:
- 02/03/20 15:13:35 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs
r17407 r17417 10 10 namespace HeuristicLab.JsonInterface { 11 11 12 public class IntArrayConverter : ValueTypeArrayConverter<IntArray, int>{12 public class IntArrayConverter : BaseConverter { 13 13 public override int Priority => 1; 14 14 public override Type ConvertableType => typeof(IntArray); 15 16 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 17 IntArray arr = item as IntArray; 18 int[] d = CastValue<int[]>(data); 19 bool resizeTmp = arr.Resizable; 20 arr.Resizable = true; 21 arr.Length = d.Length; 22 for (int i = 0; i < d.Length; ++i) 23 arr[i] = d[i]; 24 arr.Resizable = resizeTmp; 25 } 26 27 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 28 new IntArrayJsonItem() { 29 Name = "[OverridableParamName]", 30 Value = ((IntArray)value).CloneAsArray() 31 }; 15 32 } 16 33 17 public class DoubleArrayConverter : ValueTypeArrayConverter<DoubleArray, double>{34 public class DoubleArrayConverter : BaseConverter { 18 35 public override int Priority => 1; 19 36 public override Type ConvertableType => typeof(DoubleArray); 37 38 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 39 DoubleArray arr = item as DoubleArray; 40 double[] d = CastValue<double[]>(data); 41 bool resizeTmp = arr.Resizable; 42 arr.Resizable = true; 43 arr.Length = d.Length; 44 for (int i = 0; i < d.Length; ++i) 45 arr[i] = d[i]; 46 arr.Resizable = resizeTmp; 47 } 48 49 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 50 new DoubleArrayJsonItem() { 51 Name = "[OverridableParamName]", 52 Value = ((DoubleArray)value).CloneAsArray() 53 }; 20 54 } 21 55 22 public class PercentArrayConverter : ValueTypeArrayConverter<PercentArray, double>{56 public class PercentArrayConverter : BaseConverter { 23 57 public override int Priority => 2; 24 58 public override Type ConvertableType => typeof(PercentArray); 59 60 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 61 PercentArray arr = item as PercentArray; 62 double[] d = CastValue<double[]>(data); 63 bool resizeTmp = arr.Resizable; 64 arr.Resizable = true; 65 arr.Length = d.Length; 66 for (int i = 0; i < d.Length; ++i) 67 arr[i] = d[i]; 68 arr.Resizable = resizeTmp; 69 } 70 71 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 72 new DoubleArrayJsonItem() { 73 Name = "[OverridableParamName]", 74 Value = ((PercentArray)value).CloneAsArray() 75 }; 25 76 } 26 77 27 public class BoolArrayConverter : ValueTypeArrayConverter<BoolArray, bool>{78 public class BoolArrayConverter : BaseConverter { 28 79 public override int Priority => 1; 29 80 public override Type ConvertableType => typeof(BoolArray); 30 }31 81 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)); 82 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 83 BoolArray arr = item as BoolArray; 84 bool[] d = CastValue<bool[]>(data); 85 bool resizeTmp = arr.Resizable; 86 arr.Resizable = true; 87 arr.Length = d.Length; 88 for(int i = 0; i < d.Length; ++i) 89 arr[i] = d[i]; 90 arr.Resizable = resizeTmp; 91 } 38 92 39 93 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 40 new JsonItem() {94 new BoolArrayJsonItem() { 41 95 Name = "[OverridableParamName]", 42 Value = (( ArrayType)value).CloneAsArray()96 Value = ((BoolArray)value).CloneAsArray() 43 97 }; 44 45 #region Helper46 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 #endregion54 98 } 55 99 }
Note: See TracChangeset
for help on using the changeset viewer.