Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/25/09 17:16:32 (15 years ago)
Author:
epitzer
Message:

Implement persistence of storables as decomposer. (#506)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/New Persistence Exploration/Persistence/Persistence/Default/Decomposers/ArrayDecomposer.cs

    r1405 r1419  
    33using HeuristicLab.Persistence.Core;
    44using HeuristicLab.Persistence.Interfaces;
     5using System.Collections.Generic;
    56
    67namespace HeuristicLab.Persistence.Default.Decomposers {
     
    1314    }
    1415
    15     public IEnumerable DeCompose(object array) {
     16    public IEnumerable<Tag> DeCompose(object array) {
    1617      Array a = (Array)array;
    17       yield return a.Rank;
     18      yield return new Tag("rank", a.Rank);
    1819      for (int i = 0; i < a.Rank; i++) {
    19         yield return a.GetLength(i);
     20        yield return new Tag("length_" + i, a.GetLength(i));
    2021      }
    2122      foreach (object o in (Array)array) {
    22         yield return o;
     23        yield return new Tag(null, o);
    2324      }
    2425    }
    2526
    26     public object Compose(IEnumerable elements, Type t) {
    27       IEnumerator e = elements.GetEnumerator();
     27    public object CreateInstance(Type t) {
     28      return null;
     29    }
     30
     31    public object Populate(object instance, IEnumerable<Tag> elements, Type t) {
     32      IEnumerator<Tag> e = elements.GetEnumerator();
    2833      e.MoveNext();
    29       int rank = (int)e.Current;
     34      int rank = (int)e.Current.Value;
    3035      int[] lengths = new int[rank];
    3136      for (int i = 0; i < rank; i++) {
    3237        e.MoveNext();
    33         lengths[i] = (int)e.Current;
     38        lengths[i] = (int)e.Current.Value;
    3439      }
    3540      Array a = Array.CreateInstance(t.GetElementType(), lengths);     
    3641      int[] positions = new int[rank];
    3742      while (e.MoveNext()) {
    38         a.SetValue(e.Current, positions);
     43        a.SetValue(e.Current.Value, positions);
    3944        positions[0] += 1;
    4045        for (int i = 0; i < rank-1; i++) {
Note: See TracChangeset for help on using the changeset viewer.