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