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