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 Parent(int x)
 {
     return(BitVector.Rank(BitVector.Select(x, true), false));
 }