Free cookie consent management tool by TermsFeed Policy Generator

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

Unify token classes for parsing and formatting, make format specification mandatory. (#506)

File:
1 edited

Legend:

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

    r1355 r1356  
    5757    }
    5858
    59     private delegate void Handler(IParseToken token);
     59    private delegate void Handler(ISerializationToken token);
    6060
    6161    private readonly Dictionary<int, object> id2obj;
     
    6868    private List<Thunk> finalFixes;
    6969
    70     public DeSerializer(IEnumerable<KeyValuePair<string, int>> typeCache) :
    71       this(typeCache, PersistenceConfiguration.Instance) {}
    72  
    7370    public DeSerializer(
    7471      IEnumerable<KeyValuePair<string, int>> typeCache,
     
    7875      compositeStack = new Stack<IAccessibleObject>();
    7976      handlers = new Dictionary<Type, Handler> {
    80                      {typeof (CompositeStart), CompositeStartHandler},
    81                      {typeof (CompositeEnd), CompositeEndHandler},
    82                      {typeof (Primitive), PrimitiveHandler},
    83                      {typeof (Reference), ReferenceHandler},
    84                      {typeof (Null), NullHandler}
     77                     {typeof (BeginToken), CompositeStartHandler},
     78                     {typeof (EndToken), CompositeEndHandler},
     79                     {typeof (PrimitiveToken), PrimitiveHandler},
     80                     {typeof (ReferenceToken), ReferenceHandler},
     81                     {typeof (NullReferenceToken), NullHandler}
    8582                   };     
    8683      typeIds = new Dictionary<int, Type>();
     
    9188    }
    9289
    93     public object DeSerialize(IEnumerable<IParseToken> tokens) {
     90    public object DeSerialize(IEnumerable<ISerializationToken> tokens) {
    9491      finalFixes = new List<Thunk>();
    95       foreach (IParseToken token in tokens) {
     92      foreach (ISerializationToken token in tokens) {
    9693        handlers[token.GetType()].Invoke(token);
    9794      }
     
    10299    }
    103100
    104     private void CompositeStartHandler(IParseToken token) {
    105       CompositeStart start = (CompositeStart)token;
    106       object instance;
    107       Type type = typeIds[int.Parse(start.TypeId)];
     101    private void CompositeStartHandler(ISerializationToken token) {
     102      BeginToken start = (BeginToken)token;
     103      object instance;     
     104      Type type = typeIds[(int)start.TypeId];
    108105      if (persistenceConfiguration.GetDecomposer(type) != null) {
    109106        instance = new ParentReference();
     
    118115        id2obj.Add((int)start.Id, instance);
    119116    }
    120     private void CompositeEndHandler(IParseToken token) {
    121       CompositeEnd end = (CompositeEnd)token;
    122       Type type = typeIds[int.Parse(end.TypeId)];
     117    private void CompositeEndHandler(ISerializationToken token) {
     118      EndToken end = (EndToken)token;
     119      Type type = typeIds[(int)end.TypeId];
    123120      IDecomposer decomposer = persistenceConfiguration.GetDecomposer(type);
    124121      if (decomposer != null) {
     
    134131        SetValue(end.Name, compositeObject.Obj);
    135132      }
    136     }   
    137     private void PrimitiveHandler(IParseToken token) {
    138       Primitive primitive = (Primitive)token;
    139       Type type = typeIds[int.Parse(primitive.TypeId)];
     133    }
     134    private void PrimitiveHandler(ISerializationToken token) {
     135      PrimitiveToken primitive = (PrimitiveToken)token;
     136      Type type = typeIds[(int)primitive.TypeId];
    140137      object value = persistenceConfiguration
    141138        .GetFormatter(XmlFormat.Instance, type)
    142         .DeSerialize(primitive.SerializedValue);
     139        .DeSerialize(primitive.SerialData);
    143140      if ( ! value.GetType().IsValueType )
    144141        id2obj[(int)primitive.Id] = value;
    145142      SetValue(primitive.Name, value);
    146143    }
    147     private void ReferenceHandler(IParseToken token) {
    148       Reference reference = (Reference)token;
     144    private void ReferenceHandler(ISerializationToken token) {
     145      ReferenceToken reference = (ReferenceToken)token;
    149146      object referredObject = id2obj[reference.Id];
    150147      SetValue(reference.Name, id2obj[reference.Id]);
     
    155152      }
    156153    }
    157     private void NullHandler(IParseToken token) {
    158       Null nil = (Null)token;
     154    private void NullHandler(ISerializationToken token) {
     155      NullReferenceToken nil = (NullReferenceToken)token;
    159156      SetValue(nil.Name, null);
    160157    }
Note: See TracChangeset for help on using the changeset viewer.