TrieSegment Find(string prefix) { Fx.Assert(null != prefix, ""); if (0 == prefix.Length) { return(this.Root); } if (!this.HasDescendants) { return(null); } TrieTraverser traverser = new TrieTraverser(this.root, prefix); // struct TrieSegment foundSegment = null; while (traverser.MoveNext()) { foundSegment = traverser.Segment; } if (traverser.Length > 0) { // We haven't used up the entire prefix in this search. Clearly, we didn't find the matching node return(null); } return(foundSegment); }
private void Match(int valIndex, string segment, QueryBranchResultSet results) { TrieTraverser traverser = new TrieTraverser(this.trie.Root, segment); while (traverser.MoveNext()) { object data = traverser.Segment.Data; if (data != null) { results.Add((QueryBranch) data, valIndex); } } }
private void Match(int valIndex, string segment, QueryBranchResultSet results) { TrieTraverser traverser = new TrieTraverser(this.trie.Root, segment); while (traverser.MoveNext()) { object data = traverser.Segment.Data; if (data != null) { results.Add((QueryBranch)data, valIndex); } } }
private TrieSegment Find(string prefix) { if (prefix.Length == 0) { return(this.Root); } if (!this.HasDescendants) { return(null); } TrieTraverser traverser = new TrieTraverser(this.root, prefix); TrieSegment segment = null; while (traverser.MoveNext()) { segment = traverser.Segment; } if (traverser.Length > 0) { return(null); } return(segment); }