Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs @ 17395

Last change on this file since 17395 was 17394, checked in by dpiringe, 4 years ago

#3026:

  • deleted: ConvertableAttribute, DummyConverter, ObjectExtensions
  • renamed: CustomJsonWriter -> SingleLineArrayJsonWriter, JCInstantiator -> JsonTemplateInstantiator
  • added: JsonItemConverterFactory, UnsupportedJsonItem
  • IJsonItemConverter:
    • added two new properties: Priority and ConvertableType -> because converters are automatically collected by plugin infrastructure now
    • Extract, Inject references a root converter now -> typically an instance of JsonItemConverter -> to prevent cycles
  • JsonItemConverter:
    • now implements the interface IJsonItemConverter
    • is now a dynamic class
    • is only instantiable with an factory (JsonItemConverterFactory)
    • still has the old (but now public) static methods Extract and Inject (without ref param IJsonItemConverter root) -> creates instance with factory and calls methods of instance
    • removed register and unregister methods, because the factory collects all converters automatically now (on first call of Create)
    • has cycle detection for Extract and Inject
    • renamed method Get to GetConverter
File size: 1.8 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using HeuristicLab.Core;
7using HeuristicLab.Data;
8using Newtonsoft.Json.Linq;
9
10namespace 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}
Note: See TracBrowser for help on using the repository browser.