Exemple #1
0
        public IEnumerable <string> Search(string key)
        {
            var keyIndex = KeyTrie.Get(key);

            if (keyIndex != -1)
            {
                var valueStartPos = MappingBitVector.Select(keyIndex, false);
                var valueEndPos   = MappingBitVector.NextClearBit(valueStartPos + 1);
                var size          = valueEndPos - valueStartPos - 1;
                if (size > 0)
                {
                    var offset = MappingBitVector.Rank(valueStartPos, false);
                    for (var i = 0; i < size; i++)
                    {
                        yield return(ValueTrie.GetKey((int)Mapping[valueStartPos - offset + i]));
                    }
                }
            }
        }
Exemple #2
0
        public int Traverse(int index, char c)
        {
            var firstChild = FirstChild(index);

            if (firstChild == -1)
            {
                return(-1);
            }
            var childStartBit = BitVector.Select(firstChild, true);
            var childEndBit   = BitVector.NextClearBit(childStartBit);
            var childSize     = childEndBit - childStartBit;
            var result        = Array.BinarySearch(Edges, firstChild, childSize, c);

            return(result >= 0 ? result : -1);
        }