Exemplo 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);
        }
Exemplo n.º 2
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]);
        }
Exemplo n.º 3
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);
        }