internal void SerializeUserConfigurationCacheEntries(BinaryWriter writer)
        {
            writer.Write(1);
            int capacity = 0;

            lock (this.userConfigCacheEntryList)
            {
                capacity = this.userConfigCacheEntryList.Count;
            }
            List <UserConfigurationCacheEntry> list = new List <UserConfigurationCacheEntry>(capacity);

            lock (this.userConfigCacheEntryList)
            {
                list.AddRange(new List <UserConfigurationCacheEntry>(this.userConfigCacheEntryList));
            }
            writer.Write(list.Count);
            for (int i = 0; i < list.Count; i++)
            {
                UserConfigurationCacheEntry userConfigurationCacheEntry = list[i];
                string configurationName = userConfigurationCacheEntry.ConfigurationName;
                writer.Write(configurationName);
                byte[] bytes = userConfigurationCacheEntry.FolderId.GetBytes();
                writer.Write(bytes.Length);
                writer.Write(bytes);
                byte[] bytes2 = userConfigurationCacheEntry.ItemId.GetBytes();
                writer.Write(bytes2.Length);
                writer.Write(bytes2);
            }
        }
        internal void Remove(UserConfigurationName configName, StoreObjectId folderId)
        {
            LinkedListNode <UserConfigurationCacheEntry> linkedListNode = this.userConfigCacheEntryList.First;

            lock (this.userConfigCacheEntryList)
            {
                while (linkedListNode != null)
                {
                    UserConfigurationCacheEntry value = linkedListNode.Value;
                    if (value.CheckMatch(configName.Name, folderId))
                    {
                        this.userConfigCacheEntryList.Remove(linkedListNode);
                        break;
                    }
                    linkedListNode = linkedListNode.Next;
                }
            }
        }
        internal bool TryGetUserConfigurationCachedEntry(UserConfigurationName configName, StoreObjectId folderId, out UserConfigurationCacheEntry cacheEntry)
        {
            bool result;

            lock (this.userConfigCacheEntryList)
            {
                for (LinkedListNode <UserConfigurationCacheEntry> linkedListNode = this.userConfigCacheEntryList.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
                {
                    UserConfigurationCacheEntry value = linkedListNode.Value;
                    if (value.CheckMatch(configName.Name, folderId))
                    {
                        cacheEntry = value;
                        return(true);
                    }
                }
                cacheEntry = null;
                result     = false;
            }
            return(result);
        }
        internal void AddUserConfigurationCachedEntry(StoreObjectId folderId, string configName, StoreObjectId itemId, bool canCleanse)
        {
            UserConfigurationCacheEntry value = new UserConfigurationCacheEntry(configName, folderId, itemId);
            LinkedListNode <UserConfigurationCacheEntry> node = new LinkedListNode <UserConfigurationCacheEntry>(value);

            lock (this.userConfigCacheEntryList)
            {
                for (LinkedListNode <UserConfigurationCacheEntry> linkedListNode = this.userConfigCacheEntryList.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
                {
                    UserConfigurationCacheEntry value2 = linkedListNode.Value;
                    if (value2.CheckMatch(configName, folderId))
                    {
                        linkedListNode.Value = value;
                        return;
                    }
                }
                if (canCleanse && this.userConfigCacheEntryList.Count > 32)
                {
                    this.userConfigCacheEntryList.RemoveLast();
                    ExTraceGlobals.UserConfigurationTracer.TraceDebug <int>((long)this.GetHashCode(), "UserConfigurationCache::Add. The cache has reached the capacity: {0} the last entry was removed.", 32);
                }
                this.userConfigCacheEntryList.AddFirst(node);
            }
        }