Esempio n. 1
0
            public void Add(T key, U value)
            {
                int a = key.CompareTo(this.key);

                if (a > 0)
                {
                    if (right != null)
                    {
                        right.Add(key, value);
                    }
                    else
                    {
                        right = new SorterNode()
                        {
                            key = key, value = value
                        };
                    }
                }
                else
                {
                    if (left != null)
                    {
                        left.Add(key, value);
                    }
                    else
                    {
                        left = new SorterNode()
                        {
                            key = key, value = value
                        };
                    }
                }
            }
        public Queue <SorterNode> Build(string query)
        {
            if (string.IsNullOrWhiteSpace(query))
            {
                return(null);
            }

            _tokenizer = new ODataOrderByTokenizer(query.TrimEnd().ToCharArray());

            while (!_tokenizer.End())
            {
                var(tokenType, token) = _tokenizer.GetToken();

                switch (tokenType)
                {
                case ODataOrderByTokenizerTokenTypes.FieldName:
                {
                    if (_status == ODataOrderByBuilderStatuses.Initial)
                    {
                        _status = ODataOrderByBuilderStatuses.BuildingSorter;

                        _sorterNode = new SorterNode
                        {
                            FieldName = token
                        };
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }
                break;

                case ODataOrderByTokenizerTokenTypes.SortOrder:
                {
                    if (_status == ODataOrderByBuilderStatuses.BuildingSorter)
                    {
                        _sorterNode.SortingOrder = token == "desc" ?
                                                   SorterNode.SortingOrders.Descending :
                                                   SorterNode.SortingOrders.Ascending;

                        _sorters.Enqueue(_sorterNode);

                        _status = ODataOrderByBuilderStatuses.Initial;
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }
                break;

                case ODataOrderByTokenizerTokenTypes.Comma:
                {
                    // Ignore
                }
                break;

                default: throw new NotImplementedException();
                }
            }

            return(_sorters);
        }
Esempio n. 3
0
 public void Clear()
 {
     root = new SorterNode();
 }