Exemple #1
0
        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);
            }
        }
Exemple #2
0
        ///<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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        ///<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();
            }
        }
Exemple #5
0
        /// <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));
        }
Exemple #6
0
        ///<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);
            }
        }
Exemple #7
0
		///<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;
		}
Exemple #8
0
        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;
        }
Exemple #9
0
        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);
        }