Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/03/20 15:13:35 (5 years ago)
Author:
dpiringe
Message:

#3026:

  • added initial VM (ArrayValueVM) and control for array values (JsonItemArrayValueControl)
  • new types of JsonItems for better type safety:
    • for arrays: DoubleArrayJsonItem, IntArrayJsonItem, BoolArrayJsonItem
    • for matrix: DoubleMatrixJsonItem, IntMatrixJsonItem, BoolMatrixJsonItem
  • refactored ValueTypeArrayConverter and ValueTypeMatrixConverter -> better type safety with new JsonItems
  • enhanced StringValueVM and implemented JsonItemValidValuesControl with MVVM architecture
  • the VM of JsonItemBaseControl is now protected (was private)
  • improved JsonItem<V,R> -> now handles JTokens correctly
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs

    r17407 r17417  
    1010namespace HeuristicLab.JsonInterface {
    1111
    12   public class IntArrayConverter : ValueTypeArrayConverter<IntArray, int> {
     12  public class IntArrayConverter : BaseConverter {
    1313    public override int Priority => 1;
    1414    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      };
    1532  }
    1633
    17   public class DoubleArrayConverter : ValueTypeArrayConverter<DoubleArray, double> {
     34  public class DoubleArrayConverter : BaseConverter {
    1835    public override int Priority => 1;
    1936    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      };
    2054  }
    2155
    22   public class PercentArrayConverter : ValueTypeArrayConverter<PercentArray, double> {
     56  public class PercentArrayConverter : BaseConverter {
    2357    public override int Priority => 2;
    2458    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      };
    2576  }
    2677
    27   public class BoolArrayConverter : ValueTypeArrayConverter<BoolArray, bool> {
     78  public class BoolArrayConverter : BaseConverter {
    2879    public override int Priority => 1;
    2980    public override Type ConvertableType => typeof(BoolArray);
    30   }
    3181
    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    }
    3892
    3993    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
    40       new JsonItem() {
     94      new BoolArrayJsonItem() {
    4195        Name = "[OverridableParamName]",
    42         Value = ((ArrayType)value).CloneAsArray()
     96        Value = ((BoolArray)value).CloneAsArray()
    4397      };
    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
    5498  }
    5599}
Note: See TracChangeset for help on using the changeset viewer.