Esempio n. 1
0
        // 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]);
        }
Esempio n. 4
0
        // 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);
        }
Esempio n. 6
0
        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);
        }