示例#1
0
 public void InitializeReaders(SaveEntryFolder saveEntryFolder)
 {
     foreach (FolderId childStructName in this.GetChildStructNames(saveEntryFolder))
     {
         int            localId        = childStructName.LocalId;
         ObjectLoadData objectLoadData = new ObjectLoadData(this.Context, localId);
         this._childStructs.Add(localId, objectLoadData);
     }
     for (int id = 0; id < this._elementCount; ++id)
     {
         ElementLoadData elementLoadData1 = new ElementLoadData(this, (IReader)saveEntryFolder.GetEntry(new EntryId(id, SaveEntryExtension.Value)).GetBinaryReader());
         this._values[id] = elementLoadData1;
         if (this._containerType == ContainerType.Dictionary)
         {
             ElementLoadData elementLoadData2 = new ElementLoadData(this, (IReader)saveEntryFolder.GetEntry(new EntryId(id, SaveEntryExtension.Key)).GetBinaryReader());
             this._keys[id] = elementLoadData2;
         }
     }
     foreach (KeyValuePair <int, ObjectLoadData> childStruct in this._childStructs)
     {
         int key = childStruct.Key;
         childStruct.Value.InitializeReaders(saveEntryFolder.GetChildFolder(new FolderId(key, SaveFolderExtension.Struct)));
     }
 }
示例#2
0
 public void FillObject()
 {
     foreach (ObjectLoadData objectLoadData in this._childStructs.Values)
     {
         objectLoadData.FillObject();
     }
     for (int index1 = 0; index1 < this._elementCount; ++index1)
     {
         if (this._containerType == ContainerType.List)
         {
             IList           target          = (IList)this.Target;
             ElementLoadData elementLoadData = this._values[index1];
             if (elementLoadData.SavedMemberType == SavedMemberType.CustomStruct)
             {
                 ObjectLoadData childStruct = this._childStructs[(int)elementLoadData.Data];
                 elementLoadData.SetCustomStructData(childStruct.Target);
             }
             object dataToUse = elementLoadData.GetDataToUse();
             target?.Add(dataToUse);
         }
         else if (this._containerType == ContainerType.Dictionary)
         {
             IDictionary     target          = (IDictionary)this.Target;
             ElementLoadData key             = this._keys[index1];
             ElementLoadData elementLoadData = this._values[index1];
             if (key.SavedMemberType == SavedMemberType.CustomStruct)
             {
                 ObjectLoadData childStruct = this._childStructs[(int)key.Data];
                 key.SetCustomStructData(childStruct.Target);
             }
             if (elementLoadData.SavedMemberType == SavedMemberType.CustomStruct)
             {
                 ObjectLoadData childStruct = this._childStructs[(int)elementLoadData.Data];
                 elementLoadData.SetCustomStructData(childStruct.Target);
             }
             object dataToUse1 = key.GetDataToUse();
             object dataToUse2 = elementLoadData.GetDataToUse();
             if (target != null && dataToUse1 != null)
             {
                 target.Add(dataToUse1, dataToUse2);
             }
         }
         else if (this._containerType == ContainerType.Array)
         {
             Array           target          = (Array)this.Target;
             ElementLoadData elementLoadData = this._values[index1];
             if (elementLoadData.SavedMemberType == SavedMemberType.CustomStruct)
             {
                 ObjectLoadData childStruct = this._childStructs[(int)elementLoadData.Data];
                 elementLoadData.SetCustomStructData(childStruct.Target);
             }
             object dataToUse = elementLoadData.GetDataToUse();
             int    index2    = index1;
             target.SetValue(dataToUse, index2);
         }
         else if (this._containerType == ContainerType.Queue)
         {
             ICollection     target          = (ICollection)this.Target;
             ElementLoadData elementLoadData = this._values[index1];
             if (elementLoadData.SavedMemberType == SavedMemberType.CustomStruct)
             {
                 ObjectLoadData childStruct = this._childStructs[(int)elementLoadData.Data];
                 elementLoadData.SetCustomStructData(childStruct.Target);
             }
             object dataToUse = elementLoadData.GetDataToUse();
             target.GetType().GetMethod("Enqueue").Invoke((object)target, new object[1]
             {
                 dataToUse
             });
         }
     }
 }