Changeset 16396


Ignore:
Timestamp:
12/18/18 17:07:52 (5 weeks ago)
Author:
jkarder
Message:

#2520: worked on new persistence

  • improved EnumerableBoxTransformer
  • fixed output path
Location:
branches/PersistenceReintegration
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/PersistenceReintegration/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/3.5.0/HeuristicLab.ProtobufCS/HeuristicLab.Protobuf-3.5.0.csproj

    r15529 r16396  
    2525    <DebugType>pdbonly</DebugType>
    2626    <Optimize>true</Optimize>
    27     <OutputPath>..\..\bin\</OutputPath>
     27    <OutputPath>..\..\..\..\bin\</OutputPath>
    2828    <DefineConstants>TRACE</DefineConstants>
    2929    <ErrorReport>prompt</ErrorReport>
  • branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs

    r16210 r16396  
    436436      }
    437437
    438       foreach (var item in (IEnumerable)value)
    439         uints.Add(mapper.GetBoxId(item));
     438      if (type.IsGenericType) {
     439        var genericType = type.GetGenericArguments().Single();
     440        if (genericType.IsPrimitive) {
     441          if (genericType == typeof(bool)) {
     442          } else if (genericType == typeof(bool)) {
     443            box.Bools.AddRange(((IEnumerable<bool>)value).ToArray());
     444          } else if (genericType == typeof(int)) {
     445            box.Ints.AddRange(((IEnumerable<int>)value).ToArray());
     446          } else if (genericType == typeof(uint)) {
     447            box.UInts.AddRange(((IEnumerable<uint>)value).ToArray());
     448          } else if (genericType == typeof(long)) {
     449            box.Longs.AddRange(((IEnumerable<long>)value).ToArray());
     450          } else if (genericType == typeof(ulong)) {
     451            box.ULongs.AddRange(((IEnumerable<ulong>)value).ToArray());
     452          } else if (genericType == typeof(float)) {
     453            box.Floats.AddRange(((IEnumerable<float>)value).ToArray());
     454          } else if (genericType == typeof(double)) {
     455            box.Doubles.AddRange(((IEnumerable<double>)value).ToArray());
     456          } else if (genericType == typeof(byte)) {
     457            box.Bytes = ByteString.CopyFrom(((IEnumerable<byte>)value).ToArray());
     458          } else {
     459            foreach (var item in (IEnumerable)value)
     460              uints.Add(mapper.GetBoxId(item));
     461          }
     462        } else {
     463          foreach (var item in (IEnumerable)value)
     464            uints.Add(mapper.GetBoxId(item));
     465        }
     466      } else {
     467        foreach (var item in (IEnumerable)value)
     468          uints.Add(mapper.GetBoxId(item));
     469      }
    440470    }
    441471
     
    446476    public override void FillFromBox(object obj, Box box, Mapper mapper) {
    447477      var uints = box.UInts;
    448       var elements = uints.Select(mapper.GetObject);
     478
     479      List<object> elements = null;
     480
    449481      var type = obj.GetType();
    450 
     482      if (type.IsGenericType) {
     483        var genericType = type.GetGenericArguments().Single();
     484        if (genericType.IsPrimitive) {
     485          if (genericType == typeof(bool)) {
     486          } else if (genericType == typeof(bool)) {
     487            elements = box.Bools.Select(x => (object)x).ToList();
     488          } else if (genericType == typeof(int)) {
     489            elements = box.Ints.Select(x => (object)x).ToList();
     490          } else if (genericType == typeof(uint)) {
     491            elements = box.UInts.Select(x => (object)x).ToList();
     492          } else if (genericType == typeof(long)) {
     493            elements = box.Longs.Select(x => (object)x).ToList();
     494          } else if (genericType == typeof(ulong)) {
     495            elements = box.ULongs.Select(x => (object)x).ToList();
     496          } else if (genericType == typeof(float)) {
     497            elements = box.Floats.Select(x => (object)x).ToList();
     498          } else if (genericType == typeof(double)) {
     499            elements = box.Doubles.Select(x => (object)x).ToList();
     500          } else if (genericType == typeof(byte)) {
     501            elements = box.Bytes.Select(x => (object)x).ToList();
     502          } else {
     503            elements = uints.Select(mapper.GetObject).ToList();
     504          }
     505        } else elements = uints.Select(mapper.GetObject).ToList();
     506      } else elements = uints.Select(mapper.GetObject).ToList();
    451507      string methodName = string.Empty;
    452508      if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Stack<>) || type == typeof(Stack)) {
    453         elements = elements.Reverse();
     509        elements.Reverse();
    454510        methodName = "Push";
    455511      } else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Queue<>) || type == typeof(Queue)) {
Note: See TracChangeset for help on using the changeset viewer.