示例#1
0
        /// <summary>
        /// Remove a specific key from a group or a sub group
        /// </summary>
        /// <param name="key"></param>
        /// <param name="group"></param>
        /// <param name="subGroup"></param>
        public void RemoveFromGroup(object key, String subGroup)
        {
            SubGroupInfoEntry subGroupInfoEntry = null;

            if (subGroup == null)
            {
                subGroup = "_DEFAULT_SUB_GRP_";
            }

            long prevSize = 0, currentSize = 0;

            if (_subGroups.Contains(subGroup))
            {
                subGroupInfoEntry = (SubGroupInfoEntry)_subGroups[subGroup];
                prevSize          = subGroupInfoEntry.IndexInMemorySize;

                subGroupInfoEntry.RemoveKey(key);

                currentSize = subGroupInfoEntry.IndexInMemorySize;

                if (subGroupInfoEntry.KeysCount == 0)
                {
                    _subGroups.Remove(subGroup);
                    ModifyIndexInMemorySize(-prevSize);
                }
                else
                {
                    ModifyIndexInMemorySize(currentSize - prevSize);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Add group information to the index
        /// </summary>
        /// <param name="key"></param>
        /// <param name="grpInfo"></param>
        public void AddToSubGroup(object key, String subGroup)
        {
            SubGroupInfoEntry subGroupInfoEntry = null;

            if (subGroup == null)
            {
                subGroup = "_DEFAULT_SUB_GRP_";
            }

            long prevSize = 0, currentSize = 0;

            if (_subGroups.Contains(subGroup))
            {
                subGroupInfoEntry = (SubGroupInfoEntry)_subGroups[subGroup];
                prevSize          = subGroupInfoEntry.IndexInMemorySize;
            }
            else
            {
                subGroupInfoEntry    = new SubGroupInfoEntry();
                _subGroups[subGroup] = subGroupInfoEntry;
            }

            subGroupInfoEntry.AddKey(key);

            currentSize = subGroupInfoEntry.IndexInMemorySize;

            ModifyIndexInMemorySize(currentSize - prevSize);
        }
示例#3
0
        /// <summary>
        /// Return all the keys in the group. If a sub group is specified keys
        /// related to that subGroup is returned only otherwise all the keys
        /// included group and subgroup is returned.
        /// </summary>
        /// <param name="group"></param>
        /// <param name="subGroup"></param>
        /// <returns></returns>
        public ArrayList GetSubGroupKeys(string subGroup)
        {
            ArrayList list = new ArrayList();

            if (!string.IsNullOrEmpty(subGroup))
            {
                if (_subGroups.Contains(subGroup))
                {
                    SubGroupInfoEntry subGroupInfoEntry = (SubGroupInfoEntry)_subGroups[subGroup];
                    list.AddRange(subGroupInfoEntry.GetAllKeys());
                }
            }
            else
            {
                IDictionaryEnumerator ide = _subGroups.GetEnumerator();
                while (ide.MoveNext())
                {
                    SubGroupInfoEntry subGroupInfoEntry = ide.Value as SubGroupInfoEntry;
                    if (subGroupInfoEntry != null)
                    {
                        list.AddRange(subGroupInfoEntry.GetAllKeys());
                    }
                }
            }
            return(list);
        }
示例#4
0
 public bool KeyExists(object key, string subGroup)
 {
     if (subGroup != null)
     {
         if (_subGroups.Contains(subGroup))
         {
             SubGroupInfoEntry subGroupInfoEntry = (SubGroupInfoEntry)_subGroups[subGroup];
             return(subGroupInfoEntry.KeyExists(key));
         }
         return(false);
     }
     else
     {
         IDictionaryEnumerator ide = _subGroups.GetEnumerator();
         while (ide.MoveNext())
         {
             if (((SubGroupInfoEntry)ide.Value).KeyExists(key))
             {
                 return(true);
             }
         }
         return(false);
     }
 }