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))); } }
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 }); } } }