public void CollectMembers() { for (int index = 0; index < this._typeDefinition.MemberDefinitions.Count; ++index) { MemberDefinition memberDefinition = this._typeDefinition.MemberDefinitions[index]; MemberSaveData memberSaveData = (MemberSaveData)null; switch (memberDefinition) { case PropertyDefinition _: PropertyDefinition propertyDefinition = (PropertyDefinition)memberDefinition; PropertyInfo propertyInfo = propertyDefinition.PropertyInfo; MemberTypeId id1 = propertyDefinition.Id; PropertySaveData propertySaveData = new PropertySaveData(this, propertyDefinition, id1); this._propertyValues.Add(propertyInfo, propertySaveData); memberSaveData = (MemberSaveData)propertySaveData; break; case FieldDefinition _: FieldDefinition fieldDefinition = (FieldDefinition)memberDefinition; FieldInfo fieldInfo = fieldDefinition.FieldInfo; MemberTypeId id2 = fieldDefinition.Id; FieldSaveData fieldSaveData = new FieldSaveData(this, fieldDefinition, id2); this._fieldValues.Add(fieldInfo, fieldSaveData); memberSaveData = (MemberSaveData)fieldSaveData; break; } TypeDefinitionBase typeDefinition1 = this.Context.DefinitionContext.GetTypeDefinition(memberDefinition.GetMemberType()); if (typeDefinition1 is TypeDefinition typeDefinition3 && !typeDefinition3.IsClassDefinition) { ObjectSaveData childStruct = this._childStructs[memberDefinition]; memberSaveData.InitializeAsCustomStruct(childStruct.ObjectId); }
public PropertySaveData( ObjectSaveData objectSaveData, PropertyDefinition propertyDefinition, MemberTypeId saveId) : base(objectSaveData) { this.PropertyDefinition = propertyDefinition; this.SaveId = saveId; }
public FieldSaveData( ObjectSaveData objectSaveData, FieldDefinition fieldDefinition, MemberTypeId saveId) : base(objectSaveData) { this.FieldDefinition = fieldDefinition; this.SaveId = saveId; }
private void SaveSingleObject( ArchiveConcurrentSerializer headerSerializer, byte[][] objectData, int id) { object childObject = this._childObjects[id]; ArchiveSerializer archiveSerializer = new ArchiveSerializer(); SaveEntryFolder rootFolder1 = SaveEntryFolder.CreateRootFolder(); SaveEntryFolder rootFolder2 = SaveEntryFolder.CreateRootFolder(); ObjectSaveData objectSaveData = new ObjectSaveData((ISaveContext)this, id, childObject, true); objectSaveData.CollectStructs(); objectSaveData.CollectMembers(); objectSaveData.CollectStrings(); objectSaveData.SaveHeaderTo(rootFolder2, (IArchiveContext)headerSerializer); objectSaveData.SaveTo(rootFolder1, (IArchiveContext)archiveSerializer); headerSerializer.SerializeFolderConcurrent(rootFolder2); archiveSerializer.SerializeFolder(rootFolder1); byte[] binaryData = archiveSerializer.FinalizeAndGetBinaryData(); objectData[id] = binaryData; }
private void CollectObjects(object parent) { if (this._idsOfChildObjects.ContainsKey(parent)) { return; } int count = this._childObjects.Count; this._childObjects.Add(parent); this._idsOfChildObjects.Add(parent, count); Type type = parent.GetType(); ObjectSaveData.GetChildObjects((ISaveContext)this, this.DefinitionContext.GetClassDefinition(type) ?? throw new Exception("Could not find type definition of type: " + (object)type), parent, this._temporaryCollectedObjects); for (int index = 0; index < this._temporaryCollectedObjects.Count; ++index) { object temporaryCollectedObject = this._temporaryCollectedObjects[index]; if (temporaryCollectedObject != null) { this._objectsToIterate.Enqueue(temporaryCollectedObject); } } this._temporaryCollectedObjects.Clear(); }
private static void ProcessChildObjectElement( object childElement, ISaveContext context, List <object> collectedObjects) { Type type = childElement.GetType(); bool isClass = type.IsClass; if (isClass && type != typeof(string)) { collectedObjects.Add(childElement); } else { if (isClass) { return; } TypeDefinition structDefinition = context.DefinitionContext.GetStructDefinition(type); if (structDefinition == null) { return; } if (structDefinition.CollectObjectsMethod != null) { structDefinition.CollectObjectsMethod(childElement, collectedObjects); } else { for (int index = 0; index < structDefinition.MemberDefinitions.Count; ++index) { MemberDefinition memberDefinition = structDefinition.MemberDefinitions[index]; ObjectSaveData.GetChildObjectFrom(context, childElement, memberDefinition, collectedObjects); } } } }
protected MemberSaveData(ObjectSaveData objectSaveData) : base(objectSaveData.Context) { this.ObjectSaveData = objectSaveData; }