public void GetData(object key, ComparisonType comparisonType, IQueryResult result, CollectionOperation op, CancellationToken token) { IComparable keyToCompare = key as IComparable; if (_store != null) { switch (comparisonType) { case ComparisonType.EQUALS: if (_store.Contains(key)) { result.AddObject(_store[key], op); } break; case ComparisonType.NOT_EQUALS: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (((IComparable)storedKey).CompareTo(keyToCompare) != 0) { result.AddObject(_store[storedKey], op); } } break; case ComparisonType.LESS_THAN: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (((IComparable)storedKey).CompareTo(keyToCompare) < 0) { result.AddObject(_store[storedKey], op); } } break; case ComparisonType.GREATER_THAN: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (((IComparable)storedKey).CompareTo(keyToCompare) > 0) { result.AddObject(_store[storedKey], op); } } break; case ComparisonType.LESS_THAN_EQUALS: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (((IComparable)storedKey).CompareTo(keyToCompare) <= 0) { result.AddObject(_store[storedKey], op); } } break; case ComparisonType.GREATER_THAN_EQUALS: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (((IComparable)storedKey).CompareTo(keyToCompare) >= 0) { result.AddObject(_store[storedKey], op); } } break; case ComparisonType.LIKE: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } string pattern = key as string; WildcardEnabledRegex regex = new WildcardEnabledRegex(pattern); if (storedKey is string) { if (regex.IsMatch((string)storedKey)) { result.AddObject(_store[storedKey], op); } } } break; case ComparisonType.NOT_LIKE: foreach (object storedKey in _store.Keys) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } string pattern = key as string; WildcardEnabledRegex regex = new WildcardEnabledRegex(pattern); if (storedKey is string) { if (!regex.IsMatch((string)storedKey)) { result.AddObject(_store[storedKey], op); } } } break; } result.Mark(op); } }
///<summary> /// GetData /// Gets the data object associated with the specified key ///<summary> public object GetData(T key, COMPARE compareType) { int result; ArrayList keyList = new ArrayList(); RedBlackNode <T> treeNode = rbTree; // begin at root IDictionaryEnumerator en = this.GetEnumerator(); string pattern; WildcardEnabledRegex regex; HashVector finalTable = null; HashVector skippedKeys = null; bool isStringValue = false; if (key is string) { isStringValue = true; } switch (compareType) { case COMPARE.EQ: // traverse tree until node is found while (treeNode != _sentinelNode) { if (isStringValue && treeNode.Key is string) { //result = string.Compare(treeNode.Key , key , true); result = treeNode.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = treeNode.Key.CompareTo(key); } if (result == 0) { lastNodeFound = treeNode; keyList.AddRange(treeNode.Data.Keys); //return treeNode.Data; return(keyList); } if (result > 0) //treenode is Greater then the one we are looking. Move to Left branch { treeNode = treeNode.Left; } else { treeNode = treeNode.Right; //treenode is Less then the one we are looking. Move to Right branch. } } break; case COMPARE.NE: // traverse tree until node is found finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { //result = string.Compare(((IComparable)en.Key) , key , true); result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result != 0) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } //keyList.AddRange(((Hashtable)en.Value).Keys); } } return(new ArrayList(finalTable.Keys)); //keyList; break; case COMPARE.GT: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { //result = string.Compare(((IComparable)en.Key) , key , true); result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result > 0) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } //keyList.AddRange(((Hashtable)en.Value).Keys); } } return(new ArrayList(finalTable.Keys)); //keyList; break; case COMPARE.LT: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { //result = string.Compare(((IComparable)en.Key) , key , true); result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result < 0) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } //keyList.AddRange(((Hashtable)en.Value).Keys); } //else break; } return(new ArrayList(finalTable.Keys)); //keyList; break; case COMPARE.GTEQ: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { //result = string.Compare(((IComparable)en.Key) , key , true); result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result >= 0) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } //keyList.AddRange(((Hashtable)en.Value).Keys); } } return(new ArrayList(finalTable.Keys)); //keyList; break; case COMPARE.LTEQ: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { //result = string.Compare(((IComparable)en.Key) , key , true); result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result <= 0) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } //keyList.AddRange(((Hashtable)en.Value).Keys); } else { break; } } return(new ArrayList(finalTable.Keys)); //keyList; break; case COMPARE.REGEX: finalTable = new HashVector(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); while (en.MoveNext()) { if (en.Key is string) { if (regex.IsMatch((string)en.Key.ToString().ToLower())) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } } //keyList.AddRange(((Hashtable)en.Value).Keys); } } return(new ArrayList(finalTable.Keys)); //keyList; break; case COMPARE.IREGEX: finalTable = new HashVector(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); skippedKeys = new HashVector(); while (en.MoveNext()) { if (en.Key is string) { if (regex.IsMatch((string)en.Key.ToString().ToLower())) { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { skippedKeys[ide.Key] = ide.Value; } } else { HashVector tmp = en.Value as HashVector; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } } } } ArrayList list = new ArrayList(finalTable.Keys); // keyList; for (int idx = list.Count - 1; idx >= 0; idx--) { if (skippedKeys.ContainsKey(list[idx])) { list.RemoveAt(idx); } } return(list); break; } return(keyList); }
/// <summary> /// Recupera o indice com base na chave informada. /// </summary> /// <param name="key">Chave que será pesquisada.</param> /// <param name="comparisonType">Tipo de comparação.</param> /// <returns></returns> public ArrayList GetData(object key, ComparisonType comparisonType) { ArrayList list = new ArrayList(); IComparable comparable = key as IComparable; if (_store != null) { switch (comparisonType) { case ComparisonType.EQUALS: if (_store.Contains(key)) { list.Add(_store[key]); } return(list); case ComparisonType.NOT_EQUALS: foreach (object obj2 in _store.Keys) { if (((IComparable)obj2).CompareTo(comparable) != 0) { list.Add(_store[obj2]); } } return(list); case ComparisonType.LESS_THAN: foreach (object obj3 in _store.Keys) { if (((IComparable)obj3).CompareTo(comparable) < 0) { list.Add(_store[obj3]); } } return(list); case ComparisonType.GREATER_THAN: foreach (object obj4 in _store.Keys) { if (((IComparable)obj4).CompareTo(comparable) > 0) { list.Add(_store[obj4]); } } return(list); case ComparisonType.LESS_THAN_EQUALS: foreach (object obj5 in _store.Keys) { if (((IComparable)obj5).CompareTo(comparable) <= 0) { list.Add(_store[obj5]); } } return(list); case ComparisonType.GREATER_THAN_EQUALS: foreach (object obj6 in _store.Keys) { if (((IComparable)obj6).CompareTo(comparable) >= 0) { list.Add(_store[obj6]); } } return(list); case ComparisonType.LIKE: foreach (object obj7 in _store.Keys) { string pattern = key as string; var regex = new WildcardEnabledRegex(pattern); if ((obj7 is string) && regex.IsMatch((string)obj7)) { list.Add(_store[key]); } } return(list); case ComparisonType.NOT_LIKE: foreach (object obj8 in _store.Keys) { string str2 = key as string; WildcardEnabledRegex regex2 = new WildcardEnabledRegex(str2); if ((obj8 is string) && !regex2.IsMatch((string)obj8)) { list.Add(_store[key]); } } return(list); } } return(list); }
///<summary> /// GetData /// Gets the data object associated with the specified key ///<summary> public void GetData(T key, COMPARE compareType, IQueryResult resultKeys, CollectionOperation mergeType, CancellationToken token) { int result; ClusteredArrayList keyList = new ClusteredArrayList(); RedBlackNode <T> treeNode = rbTree; // begin at root IDictionaryEnumerator en = null; string pattern; WildcardEnabledRegex regex; HashVector skippedKeys = null; bool isStringValue = false; if (key is string) { isStringValue = true; } //lock (_mutex) try { rwLock.AcquireReaderLock(Timeout.Infinite); switch (compareType) { case COMPARE.EQ: // traverse tree until node is found while (treeNode != _sentinelNode) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (isStringValue && treeNode.Key is string) { //result = string.Compare(treeNode.Key , key , true); result = treeNode.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = treeNode.Key.CompareTo(key); } if (result == 0) { lastNodeFound = treeNode; resultKeys.Add(treeNode.Data, mergeType); break; } if (result > 0) //treenode is Greater then the one we are looking. Move to Left branch { treeNode = treeNode.Left; } else { treeNode = treeNode.Right; //treenode is Less then the one we are looking. Move to Right branch. } } break; case COMPARE.NE: // traverse tree until node is found resultKeys = GetWrappedResult(resultKeys, key, true); en = GetEnumerator(); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result != 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } break; case COMPARE.GT: resultKeys = GetWrappedResult(resultKeys, key, false); en = GetEnumerator(false); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result > 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } else { break; } } break; case COMPARE.LT: resultKeys = GetWrappedResult(resultKeys, key, false); en = GetEnumerator(true); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result < 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } else { break; } } break; case COMPARE.GTEQ: resultKeys = GetWrappedResult(resultKeys, key, false); en = this.GetEnumerator(false); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result >= 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } else { break; } } break; case COMPARE.LTEQ: resultKeys = GetWrappedResult(resultKeys, key, false); en = this.GetEnumerator(); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result <= 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } else { break; } } break; case COMPARE.REGEX: resultKeys = GetWrappedResult(resultKeys, key, false); en = this.GetEnumerator(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (en.Key is string) { if (regex.IsMatch(en.Key.ToString().ToLower())) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } } break; case COMPARE.IREGEX: resultKeys = GetWrappedResult(resultKeys, key, true); en = this.GetEnumerator(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); while (en.MoveNext()) { if (token != null && token.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } if (en.Key is string) { if (!regex.IsMatch(en.Key.ToString().ToLower())) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } } break; } resultKeys.Mark(mergeType); } finally { rwLock.ReleaseReaderLock(); } }
/// <summary> /// Recupera um dado da árvore pela chave informada. /// </summary> /// <param name="key">Chave que será comparada.</param> /// <param name="compareType">Tipo de comparação.</param> /// <returns></returns> public object GetData(IComparable key, COMPARE compareType) { string str; WildcardEnabledRegex regex; ArrayList list = new ArrayList(); RedBlackNode rbTree = _rbTree; IDictionaryEnumerator enumerator = this.GetEnumerator(); Hashtable result = null; Hashtable hashtable2 = null; switch (compareType) { case COMPARE.EQ: while (rbTree != _sentinelNode) { int num = Compare(rbTree.Key, key); if (num == 0) { _lastNodeFound = rbTree; list.AddRange(rbTree.Data.Keys); return(list); } if (num > 0) { rbTree = rbTree.Left; } else { rbTree = rbTree.Right; } } return(list); case COMPARE.NE: result = new Hashtable(); while (enumerator.MoveNext()) { if (Compare(((IComparable)enumerator.Key), key) != 0) { IDictionaryEnumerator enumerator2 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator2.MoveNext()) { result[enumerator2.Key] = enumerator2.Value; } } } return(new ArrayList(result.Keys)); case COMPARE.LT: result = new Hashtable(); while (enumerator.MoveNext()) { if (Compare(((IComparable)enumerator.Key), key) < 0) { IDictionaryEnumerator enumerator4 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator4.MoveNext()) { result[enumerator4.Key] = enumerator4.Value; } } } return(new ArrayList(result.Keys)); case COMPARE.GT: result = new Hashtable(); while (enumerator.MoveNext()) { if (Compare(((IComparable)enumerator.Key), key) > 0) { IDictionaryEnumerator enumerator3 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator3.MoveNext()) { result[enumerator3.Key] = enumerator3.Value; } } } return(new ArrayList(result.Keys)); case COMPARE.LTEQ: result = new Hashtable(); while (enumerator.MoveNext()) { if (Compare(((IComparable)enumerator.Key), key) > 0) { break; } IDictionaryEnumerator enumerator6 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator6.MoveNext()) { result[enumerator6.Key] = enumerator6.Value; } } break; case COMPARE.GTEQ: result = new Hashtable(); while (enumerator.MoveNext()) { if (Compare(((IComparable)enumerator.Key), key) >= 0) { IDictionaryEnumerator enumerator5 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator5.MoveNext()) { result[enumerator5.Key] = enumerator5.Value; } } } return(new ArrayList(result.Keys)); case COMPARE.REGEX: result = new Hashtable(); str = key as string; regex = new WildcardEnabledRegex(str); while (enumerator.MoveNext()) { if ((enumerator.Key is string) && regex.IsMatch((string)enumerator.Key)) { IDictionaryEnumerator enumerator7 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator7.MoveNext()) { result[enumerator7.Key] = enumerator7.Value; } } } return(new ArrayList(result.Keys)); case COMPARE.IREGEX: { result = new Hashtable(); str = key as string; regex = new WildcardEnabledRegex(str); hashtable2 = new Hashtable(); while (enumerator.MoveNext()) { if (enumerator.Key is string) { if (regex.IsMatch((string)enumerator.Key)) { IDictionaryEnumerator enumerator8 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator8.MoveNext()) { hashtable2[enumerator8.Key] = enumerator8.Value; } } else { IDictionaryEnumerator enumerator9 = (enumerator.Value as Hashtable).GetEnumerator(); while (enumerator9.MoveNext()) { result[enumerator9.Key] = enumerator9.Value; } } } } ArrayList list2 = new ArrayList(result.Keys); for (int i = list2.Count - 1; i >= 0; i--) { if (hashtable2.ContainsKey(list2[i])) { list2.RemoveAt(i); } } return(list2); } default: return(list); } return(new ArrayList(result.Keys)); }
///<summary> /// GetData /// Gets the data object associated with the specified key ///<summary> public void GetData(T key, COMPARE compareType, IQueryResult resultKeys, CollectionOperation mergeType) { lock (_mutex) { int result; ClusteredArrayList keyList = new ClusteredArrayList(); RedBlackNode <T> treeNode = rbTree; // begin at root IDictionaryEnumerator en = this.GetEnumerator(); string pattern; WildcardEnabledRegex regex; HashVector finalTable = null; HashVector skippedKeys = null; bool isStringValue = false; if (key is string) { isStringValue = true; } switch (compareType) { case COMPARE.EQ: // traverse tree until node is found while (treeNode != _sentinelNode) { if (isStringValue && treeNode.Key is string) { result = treeNode.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = treeNode.Key.CompareTo(key); } if (result == 0) { lastNodeFound = treeNode; resultKeys.Add(treeNode.Data, mergeType); //return treeNode.Data; } if (result > 0) //treenode is Greater then the one we are looking. Move to Left branch { treeNode = treeNode.Left; } else { treeNode = treeNode.Right; //treenode is Less then the one we are looking. Move to Right branch. } } break; case COMPARE.NE: // traverse tree until node is found finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result != 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } break; case COMPARE.GT: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result > 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } break; case COMPARE.LT: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result < 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } break; case COMPARE.GTEQ: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result >= 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } break; case COMPARE.LTEQ: finalTable = new HashVector(); while (en.MoveNext()) { if (isStringValue && en.Key is string) { result = en.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); } else { result = ((IComparable)en.Key).CompareTo(key); } if (result <= 0) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } else { break; } } break; case COMPARE.REGEX: en = this.GetEnumerator(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); while (en.MoveNext()) { if (en.Key is string) { if (regex.IsMatch(en.Key.ToString().ToLower())) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } } break; case COMPARE.IREGEX: en = this.GetEnumerator(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); while (en.MoveNext()) { if (en.Key is string) { if (!regex.IsMatch(en.Key.ToString().ToLower())) { HashVector tmp = en.Value as HashVector; resultKeys.Add(tmp, mergeType); } } } break; } resultKeys.Mark(mergeType); } }
///<summary> /// GetData /// Gets the data object associated with the specified key ///<summary> public object GetData(IComparable key, COMPARE compareType) { int result; ArrayList keyList = new ArrayList(); RedBlackNode treeNode = rbTree; // begin at root IDictionaryEnumerator en = this.GetEnumerator(); string pattern; WildcardEnabledRegex regex; Hashtable finalTable = null; Hashtable skippedKeys = null; bool isStringValue = false; if (key is string) isStringValue = true; switch(compareType) { case COMPARE.EQ: // traverse tree until node is found while (treeNode != _sentinelNode) { if (isStringValue && treeNode.Key is string) result = treeNode.Key.ToString().ToLower().CompareTo(key.ToString().ToLower()); else result = treeNode.Key.CompareTo(key); if(result == 0) { lastNodeFound = treeNode; keyList.AddRange(treeNode.Data.Keys); //return treeNode.Data; return keyList; } if(result > 0) //treenode is Greater then the one we are looking. Move to Left branch treeNode = treeNode.Left; else treeNode = treeNode.Right; //treenode is Less then the one we are looking. Move to Right branch. } break; case COMPARE.NE: // traverse tree until node is found finalTable = new Hashtable(); while (en.MoveNext()) { if (isStringValue && en.Key is string) result = ((IComparable)en.Key).ToString().ToLower().CompareTo(key.ToString().ToLower()); else result = ((IComparable)en.Key).CompareTo(key); if (result != 0) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) finalTable[ide.Key] = ide.Value; } } return new ArrayList(finalTable.Keys);//keyList; break; case COMPARE.GT: finalTable = new Hashtable(); while (en.MoveNext()) { if (isStringValue && en.Key is string) result = ((IComparable)en.Key).ToString().ToLower().CompareTo(key.ToString().ToLower()); else result = ((IComparable)en.Key).CompareTo(key); if (result > 0) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) finalTable[ide.Key] = ide.Value; } } return new ArrayList(finalTable.Keys);//keyList; break; case COMPARE.LT: finalTable = new Hashtable(); while (en.MoveNext()) { if (isStringValue && en.Key is string) result = ((IComparable)en.Key).ToString().ToLower().CompareTo(key.ToString().ToLower()); else result = ((IComparable)en.Key).CompareTo(key); if (result < 0) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) finalTable[ide.Key] = ide.Value; } } return new ArrayList(finalTable.Keys);//keyList; break; case COMPARE.GTEQ: finalTable = new Hashtable(); while (en.MoveNext()) { if (isStringValue && en.Key is string) result = ((IComparable)en.Key).ToString().ToLower().CompareTo(key.ToString().ToLower()); else result = ((IComparable)en.Key).CompareTo(key); if (result >= 0) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) finalTable[ide.Key] = ide.Value; } } return new ArrayList(finalTable.Keys);//keyList; break; case COMPARE.LTEQ: finalTable = new Hashtable(); while (en.MoveNext()) { if (isStringValue && en.Key is string) result = ((IComparable)en.Key).ToString().ToLower().CompareTo(key.ToString().ToLower()); else result = ((IComparable)en.Key).CompareTo(key); if (result <= 0) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) finalTable[ide.Key] = ide.Value; } else break; } return new ArrayList(finalTable.Keys);//keyList; break; case COMPARE.REGEX: finalTable = new Hashtable(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); while (en.MoveNext()) { if (en.Key is string) { if (regex.IsMatch((string)en.Key.ToString().ToLower())) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) finalTable[ide.Key] = ide.Value; } } } return new ArrayList(finalTable.Keys);//keyList; break; case COMPARE.IREGEX: finalTable = new Hashtable(); pattern = key as string; regex = new WildcardEnabledRegex(pattern); skippedKeys = new Hashtable(); while (en.MoveNext()) { if (en.Key is string) { if (regex.IsMatch((string)en.Key.ToString().ToLower())) { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { skippedKeys[ide.Key] = ide.Value; } } else { Hashtable tmp = en.Value as Hashtable; IDictionaryEnumerator ide = tmp.GetEnumerator(); while (ide.MoveNext()) { finalTable[ide.Key] = ide.Value; } } } } ArrayList list = new ArrayList(finalTable.Keys);// keyList; for (int idx = list.Count - 1; idx >= 0; idx--) { if (skippedKeys.ContainsKey(list[idx])) { list.RemoveAt(idx); } } return list; break; } return keyList; }
public ArrayList GetData(object key, ComparisonType comparisonType) { ArrayList result = new ArrayList(); IComparable keyToCompare = key as IComparable; if (_store != null) { switch (comparisonType) { case ComparisonType.EQUALS: if (_store.Contains(key)) result.Add(_store[key]); break; case ComparisonType.NOT_EQUALS: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) != 0) result.Add(_store[storedKey]); } break; case ComparisonType.LESS_THAN: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) < 0) result.Add(_store[storedKey]); } break; case ComparisonType.GREATER_THAN: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) > 0) result.Add(_store[storedKey]); } break; case ComparisonType.LESS_THAN_EQUALS: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) <= 0) result.Add(_store[storedKey]); } break; case ComparisonType.GREATER_THAN_EQUALS: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) >= 0) result.Add(_store[storedKey]); } break; case ComparisonType.LIKE: foreach (object storedKey in _store.Keys) { string pattern = key as string; WildcardEnabledRegex regex = new WildcardEnabledRegex(pattern); if (storedKey is string) { if (regex.IsMatch((string)storedKey)) result.Add(_store[storedKey]); } } break; case ComparisonType.NOT_LIKE: foreach (object storedKey in _store.Keys) { string pattern = key as string; WildcardEnabledRegex regex = new WildcardEnabledRegex(pattern); if (storedKey is string) { if (!regex.IsMatch((string)storedKey)) result.Add(_store[storedKey]); } } break; } } return result; }
public ArrayList GetData(object key, ComparisonType comparisonType) { ArrayList result = new ArrayList(); IComparable keyToCompare = key as IComparable; if (_store != null) { switch (comparisonType) { case ComparisonType.EQUALS: if (_store.Contains(key)) { result.Add(_store[key]); } break; case ComparisonType.NOT_EQUALS: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) != 0) { result.Add(_store[storedKey]); } } break; case ComparisonType.LESS_THAN: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) < 0) { result.Add(_store[storedKey]); } } break; case ComparisonType.GREATER_THAN: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) > 0) { result.Add(_store[storedKey]); } } break; case ComparisonType.LESS_THAN_EQUALS: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) <= 0) { result.Add(_store[storedKey]); } } break; case ComparisonType.GREATER_THAN_EQUALS: foreach (object storedKey in _store.Keys) { if (((IComparable)storedKey).CompareTo(keyToCompare) >= 0) { result.Add(_store[storedKey]); } } break; case ComparisonType.LIKE: foreach (object storedKey in _store.Keys) { string pattern = key as string; WildcardEnabledRegex regex = new WildcardEnabledRegex(pattern); if (storedKey is string) { if (regex.IsMatch((string)storedKey)) { result.Add(_store[storedKey]); } } } break; case ComparisonType.NOT_LIKE: foreach (object storedKey in _store.Keys) { string pattern = key as string; WildcardEnabledRegex regex = new WildcardEnabledRegex(pattern); if (storedKey is string) { if (!regex.IsMatch((string)storedKey)) { result.Add(_store[storedKey]); } } } break; } } return(result); }