Ejemplo n.º 1
0
        public bool KeyExists(object key, string group, string subGroup)
        {
            group    = DoTrimming(group);
            subGroup = DoTrimming(subGroup);

            if (GroupExists(group))
            {
                GroupInfoEntry entry = (GroupInfoEntry)_groups[group];
                return(entry.KeyExists(key, subGroup));
            }
            return(false);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Add group information to the index
        /// </summary>
        /// <param name="key"></param>
        /// <param name="grpInfo"></param>
        public void AddToGroup(object key, GroupInfo grpInfo)
        {
            if (grpInfo == null)
            {
                return;
            }

            string group    = grpInfo.Group;
            string subGroup = grpInfo.SubGroup;

            if (group == null)
            {
                return;
            }
            group = DoTrimming(group);
            if (subGroup != null)
            {
                subGroup = DoTrimming(subGroup);
            }

            lock (_groups.SyncRoot)
            {
                long prevSize = 0, currentSize = 0;

                if (_groups.Contains(group))
                {
                    GroupInfoEntry entry = (GroupInfoEntry)_groups[group];

                    prevSize = entry.IndexInMemorySize;

                    entry.AddToSubGroup(key, subGroup);

                    currentSize = entry.IndexInMemorySize;
                }
                else
                {
                    GroupInfoEntry entry = new GroupInfoEntry();
                    entry.AddToSubGroup(key, subGroup);
                    _groups[group] = entry;

                    currentSize = entry.IndexInMemorySize;
                }

                ModifyGroupIndexSize(currentSize - prevSize);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// returns the shallow copy of the group
        /// </summary>
        /// <param name="group"></param>
        /// <param name="subGroup"></param>
        /// <returns></returns>
        public IDictionary GetGroup(string group, string subGroup)
        {
            if (group == null)
            {
                return(null);
            }

            lock (_groups.SyncRoot)
            {
                group = DoTrimming(group);
                if (_groups.Contains(group))
                {
                    GroupInfoEntry entry = (GroupInfoEntry)_groups[group];
                    return(entry.GetSubGroups());
                }
            }

            return(null);
        }
Ejemplo n.º 4
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 GetGroupKeys(string group, string subGroup)
        {
            if (group == null)
            {
                return(null);
            }

            lock (_groups.SyncRoot)
            {
                group    = DoTrimming(group);
                subGroup = DoTrimming(subGroup);

                if (_groups.Contains(group))
                {
                    GroupInfoEntry entry = (GroupInfoEntry)_groups[group];
                    return(entry.GetSubGroupKeys(subGroup));
                }
            }
            return(new ArrayList());
        }
Ejemplo n.º 5
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, GroupInfo grpInfo)
        {
            if (grpInfo == null)
            {
                return;
            }
            string group    = grpInfo.Group;
            string subGroup = grpInfo.SubGroup;

            if (group == null)
            {
                return;
            }

            group    = DoTrimming(group);
            subGroup = DoTrimming(subGroup);

            lock (_groups.SyncRoot)
            {
                if (_groups.Contains(group))
                {
                    GroupInfoEntry entry = (GroupInfoEntry)_groups[group];

                    long prevSize = entry.IndexInMemorySize;

                    entry.RemoveFromGroup(key, subGroup);

                    long currentSize = entry.IndexInMemorySize;

                    if (entry.SubGroupsCount == 0)
                    {
                        _groups.Remove(group);
                        ModifyGroupIndexSize(-prevSize); //in case the group is being removed we will removed the whole size of the group from our groupindex size
                    }
                    else
                    {
                        ModifyGroupIndexSize(currentSize - prevSize);
                    }
                }
            }
        }