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); }
public void Clear() { root = new SorterNode(); }