public ConditionBase() { this.lhs = new VariableLink(new MyVariable(typeof(Nullable))); this.comparison = COMPARE.equal; this.rhs = new VariableLink(new MyVariable(typeof(Nullable))); this.alias = string.Empty; this.invert = false; }
void Behaviour_Start() { elapseTime = 0; UI_ShowHideQuestion(true); //MODE_PATTERN.PATTERN_COUNT MODE_PATTERN Pattern_Current = (MODE_PATTERN)Random.Range(0, 6); // 0~5 if (bTestModeStart) // debug mode { Pattern_Current = (MODE_PATTERN)Random.Range(0, 2); // 0~5 } m_ArrQList.Add(Pattern_Current); m_Count += 1; // array element //Debug.Log ( "m_Pattern_Current= "+ Pattern_Current); Debug.Log("m_Pattern_Current= " + m_ArrQList[m_Count - 1]); //UpdatePatternDisplay (m_CurrentMemoryType, Pattern_Current); UpdatePatternDisplay(m_CurrentMemoryType, (MODE_PATTERN)m_ArrQList[m_Count - 1], false); m_CMP_Current = check_N(); // to check the Current Window Debug.Log(m_CMP_Current); if (nArrIndex_last < m_Count) { //UpdateDebugLog("","N="+N+",CMP="+m_CMP_Current+"," +m_ArrQList[ nArrIndex_Start] +"=="+m_ArrQList[ nArrIndex_last]+ "?" ); UpdateDebugLog("", "" + N); } else { //UpdateDebugLog("","N="+N+",CMP="+m_CMP_Current+"," +m_ArrQList[ nArrIndex_Start] ); UpdateDebugLog("", "" + N); } updateDelegate = Behaviour_DisplayQuestion; }
void checkPlayerDecision(COMPARE nCmp, bool bPress) { Debug.Log("checkPlayerDecision:" + nCmp + "," + bPress); //Compare True // Press: correct , reset windows // Didn't Press: wrong , reset //Comapre False , Compare Skip // Press: wrong // Didn't Press: Do nothing, if (nCmp == COMPARE.CMP_TRUE) // when the pattern is correct { if (bPress) { // correct , Accumunalate the success N N_acc_Success += 1; N_acc_fail = 0; if (N_acc_Success == const_N_ToNext) // success 3 times , N will +1 { // N +1 ; N_acc_Success = 0; N_acc_fail = 0; N += 1; change_N_Window_Size(); rule_SuccessBonus(); //UpdateDebugLog("N+1! N="+ N ); UpdateDebugLog("" + N); } //N_acc = 0 ; // reset } else // player didn't press it when it's in N , so it result in fail { N_acc_fail += 1; N_acc_Success = 0; xMain.Instance.GetGameCore().BloodDamageUpdate(0.05f, "Fail_NoPress"); if (N_acc_fail == const_N_ToNext_fail) { N_acc_Success = 0; N_acc_fail = 0; rule_failPunishment(); } xMain.Instance.WriteLogIntoFile(m_LogTag + ",fail," + "didnt press,N=" + N, true); } } else { if (bPress) // wrong press { N_acc_fail += 1; N_acc_Success = 0; xMain.Instance.GetGameCore().BloodDamageUpdate(0.05f, "WrongPress"); if (N_acc_fail == const_N_ToNext_fail) { N_acc_Success = 0; N_acc_fail = 0; rule_failPunishment(); } /// Log if (nCmp == COMPARE.CMP_FALSE) { xMain.Instance.WriteLogIntoFile(m_LogTag + ",fail," + "wrong pattern,N=" + N, true); } else { xMain.Instance.WriteLogIntoFile(m_LogTag + ",fail," + "wrong N,N=" + N, true); } } } if (nCmp != COMPARE.CMP_SKIP) { if (nArrIndex_last < m_Count) { //UpdateDebugLog("A[S]="+ m_ArrQList[ nArrIndex_Start] +", A[L]="+m_ArrQList[ nArrIndex_last]+",\n N="+ N +",S="+nArrIndex_Start+",L="+ nArrIndex_last+"," +m_CMP_Current+",N_acc="+N_acc_Success ); Debug.Log("A[S]=" + m_ArrQList[nArrIndex_Start] + ", A[L]=" + m_ArrQList[nArrIndex_last] + ",\n N=" + N + ",S=" + nArrIndex_Start + ",L=" + nArrIndex_last + "," + m_CMP_Current + ",N_acc=" + N_acc_Success); } else { //UpdateDebugLog("A[S]="+ m_ArrQList[ nArrIndex_Start] +",\n N="+ N +",S="+nArrIndex_Start+",L="+ nArrIndex_last +","+ m_CMP_Current+",N_acc="+N_acc_Success ); Debug.Log("A[S]=" + m_ArrQList[nArrIndex_Start] + ",\n N=" + N + ",S=" + nArrIndex_Start + ",L=" + nArrIndex_last + "," + m_CMP_Current + ",N_acc=" + N_acc_Success); } } else { //UpdateDebugLog("SKIP:"+nArrIndex_Start+","+nArrIndex_last + ""); Debug.Log("SKIP:" + nArrIndex_Start + "," + nArrIndex_last + ""); } }
///<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> /// 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 Condition(int id, COMPARE compareType, int value, int progress) { this.id = id; this.compareType = compareType; this.value = value; }