Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/09 18:13:40 (15 years ago)
Author:
epitzer
Message:

Pluginification and major refactoring. (#506)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/New Persistence Exploration/Persistence/Persistence/Serializer.cs

    r1356 r1357  
    33using System;
    44using System.Linq;
     5using HeuristicLab.Persistence.Interfaces;
    56
    6 namespace Persistence {
     7namespace HeuristicLab.Persistence {
    78
    89  public class Serializer : IEnumerable<ISerializationToken> {
     
    4647    }
    4748
     49   
    4850    private IEnumerator<ISerializationToken> Serialize(DataMemberAccessor accessor) {
    49 
    5051      object value = accessor.Get();
    51 
    52       if (value == null) {
    53         yield return new NullReferenceToken(accessor.Name);
    54         yield break;
    55       }
    56 
    57       if (obj2id.ContainsKey(value)) {
    58         yield return new ReferenceToken(accessor.Name, obj2id[value]);
    59         yield break;
    60       }
    61      
     52      if (value == null)
     53        return NullReferenceEnumeration(accessor.Name);
     54      if (obj2id.ContainsKey(value))
     55        return ReferenceTokenEnumeration(accessor.Name, obj2id[value]);             
    6256      if ( ! typeCache.ContainsKey(value.GetType()))
    6357        typeCache.Add(value.GetType(), typeCache.Count);
    6458      int typeId = typeCache[value.GetType()];
    65 
    6659      int? id = null;
    6760      if ( ! value.GetType().IsValueType) {
     
    6962        obj2id.Add(value, (int)id);
    7063      }
     64      IFormatter formatter = persistenceConfiguration.GetFormatter(XmlFormat.Instance, value.GetType());
     65      if (formatter != null)
     66        return PrimitiveEnumeration(accessor.Name, typeId, formatter.Serialize(value), id);
     67      IDecomposer decomposer = persistenceConfiguration.GetDecomposer(value.GetType());
     68      if (decomposer != null)
     69        return CompositeEnumeration(accessor.Name, decomposer.Serialize(value), id, typeId);           
     70      return StorableEnumeration(accessor.Name, value, id, typeId);
     71    }
    7172
    72       IFormatter formatter = persistenceConfiguration.GetFormatter(XmlFormat.Instance, value.GetType());     
    73       if (formatter != null) {
    74         yield return new PrimitiveToken(
    75           accessor.Name,
    76           typeId,
    77           formatter.Serialize(value),         
    78           id);
    79         yield break;
    80       }
    81      
    82       yield return new BeginToken(accessor.Name, typeId, id);
    83       IDecomposer decomposer = persistenceConfiguration.GetDecomposer(value.GetType());     
     73    private IEnumerator<ISerializationToken> NullReferenceEnumeration(string name) {
     74      yield return new NullReferenceToken(name);
     75    }
    8476
    85       if (decomposer != null) {
    86         foreach (object o in decomposer.Serialize(value)) {
     77    private IEnumerator<ISerializationToken> ReferenceTokenEnumeration(string name, int id) {
     78      yield return new ReferenceToken(name, id);
     79    }
     80
     81    private IEnumerator<ISerializationToken> PrimitiveEnumeration(string name, int typeId, object serializedValue, int? id) {
     82      yield return new PrimitiveToken(name, typeId, serializedValue, id);
     83    }
     84
     85    private IEnumerator<ISerializationToken> CompositeEnumeration(string name, IEnumerable values, int? id, int typeId) {
     86      yield return new BeginToken(name, typeId, id);     
     87        foreach (object o in values) {
    8788          IEnumerator<ISerializationToken> iterator = Serialize(new DataMemberAccessor(o));
    8889          while (iterator.MoveNext())
    8990            yield return iterator.Current;
    9091        }
    91         yield return new EndToken(accessor.Name, typeId, id);
    92         yield break;
    93       }
     92      yield return new EndToken(name, typeId, id);       
     93    }
    9494
     95    private IEnumerator<ISerializationToken> StorableEnumeration(string name, object value, int? id, int typeId) {           
     96      yield return new BeginToken(name, typeId, id);
    9597      int nSubComponents = 0;
    9698      foreach (KeyValuePair<string, DataMemberAccessor> mapping in
     
    107109                                         value.GetType().FullName));
    108110      }
    109       yield return new EndToken(accessor.Name, typeId, id);
     111      yield return new EndToken(name, typeId, id);
    110112    }
    111    
    112113  }
     114
     115
    113116}
Note: See TracChangeset for help on using the changeset viewer.