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); }
/// <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); } }
/// <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); }
/// <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()); }
/// <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); } } } }