// It returns true if object full data should be stored instead of cached Id public bool GetObjectIdForValueTypeField <T4PO>(T4PO processedObject, ICachedSerializedObject valueSerializer) { // Check if we have such value in dictionary for specific type ValTypeDictEntry <T4PO> valTypeDictEntry = null; // Get existing dictionary with registered values for provided type if (m_ValueTypeDictionaries.ContainsKey(valueSerializer.TypeHandle)) { valTypeDictEntry = (ValTypeDictEntry <T4PO>)m_ValueTypeDictionaries[valueSerializer.TypeHandle]; } // If such dictionary deosn't exist yet - create a new one if (valTypeDictEntry == null) { valTypeDictEntry = new ValTypeDictEntry <T4PO>(); m_ValueTypeDictionaries.Add(valueSerializer.TypeHandle, valTypeDictEntry); } // If we have such value then we feel proper members if (valTypeDictEntry.ValDict.ContainsKey(processedObject)) { valueSerializer.IsRegisteredAlready = true; valueSerializer.ObjectId = valTypeDictEntry.ValDict[processedObject]; return(false); // Value from cache - system should not persist original data } // It's unknown value yet - so let's register it in dict valueSerializer.IsRegisteredAlready = false; valueSerializer.ObjectId = valTypeDictEntry.GetNextObjectId(); valTypeDictEntry.ValDict.Add(processedObject, valueSerializer.ObjectId); // Should be persisted return(true); }
// It returns true if object full data should be stored instead of cached Id public bool GetObjectIdForRefTypeField <T4PO>(T4PO processedObject, ICachedSerializedObject objectSerializer) { // Take system wide unique id of the object (unique at the moment of serialization) int objectKey = RuntimeHelpers.GetHashCode(processedObject); // Do we know this object already if (m_ObjectsDict.ContainsKey(objectKey)) { objectSerializer.IsRegisteredAlready = true; objectSerializer.ObjectId = m_ObjectsDict[objectKey]; // We should persist registered object Id in such case only return(false); } // Info that new Id has been allocated and object should be persisted instead of using ID only objectSerializer.IsRegisteredAlready = false; // Next object id objectSerializer.ObjectId = GetNextObjectId(); // Store in value cache m_ObjectsDict.Add(objectKey, objectSerializer.ObjectId); // Should be persisted return(true); }
// For deserialization public T4PO GetObjectValueForRefTypeField <T4PO>(ICachedSerializedObject valueSerializer) { if (!m_IdsDict.ContainsKey(valueSerializer.ObjectId)) { throw new SerializerException("Value Type Dictionary for provided type doesn't exist"); } return((T4PO)m_IdsDict[valueSerializer.ObjectId]); }
// It returns true if object full data should be stored instead of cached Id public T4PO GetObjectValueForValueTypeField <T4PO>(ICachedSerializedObject valueSerializer) { // Check if we have such value in dictionary for specific type ValTypeDictEntry <T4PO> valTypeDictEntry = null; // Get existing dictionary with registered values for provided type if (m_ValueTypeDictionaries.ContainsKey(valueSerializer.TypeHandle)) { valTypeDictEntry = (ValTypeDictEntry <T4PO>)m_ValueTypeDictionaries[valueSerializer.TypeHandle]; } else { throw new SerializerException("Value Type Dictionary for provided type doesn't exist"); } return(valTypeDictEntry.IdDict[valueSerializer.ObjectId]); }
// For deserialization public void RegisterValue <T4PO>(T4PO processedObject, ICachedSerializedObject valueSerializer) { // Is it registered already? if (m_IdsDict.ContainsKey(valueSerializer.ObjectId)) { return; } // Register in helper collection m_IdsDict.Add(valueSerializer.ObjectId, valueSerializer); // Take system wide unique id of the object (unique at the moment of operation) int objectKey = RuntimeHelpers.GetHashCode(processedObject); // Store in value cache m_ObjectsDict.Add(objectKey, valueSerializer.ObjectId); }
public void RegisterValue <T4PO>(T4PO processedObject, ICachedSerializedObject valueSerializer) { // Check if we have such value in dictionary for specific type ValTypeDictEntry <T4PO> valTypeDictEntry = null; // Get existing dictionary with registered values for provided type if (m_ValueTypeDictionaries.ContainsKey(valueSerializer.TypeHandle)) { valTypeDictEntry = (ValTypeDictEntry <T4PO>)m_ValueTypeDictionaries[valueSerializer.TypeHandle]; } // If such dictionary deosn't exist yet - create a new one if (valTypeDictEntry == null) { valTypeDictEntry = new ValTypeDictEntry <T4PO>(); m_ValueTypeDictionaries.Add(valueSerializer.TypeHandle, valTypeDictEntry); } // Register value in dict valTypeDictEntry.ValDict.Add(processedObject, valueSerializer.ObjectId); valTypeDictEntry.IdDict.Add(valueSerializer.ObjectId, processedObject); }