natix.CompactDS.WaveletTree.Select C# (CSharp) Method

Select() public method

public Select ( int symbol, int rank ) : int
symbol int
rank int
return int
        public int Select(int symbol, int rank)
        {
            var coderstream = new BitStream32 ();
            this.Coder.Encode (coderstream, symbol);
            int numbits = (int)coderstream.CountBits;
            var symnode = this.Alphabet [symbol];
            //if (symnode == null || symnode.Count < rank) {
            if (symnode == null || rank == 0) {
                return -1;
            }
            WT_Inner node = symnode.Parent as WT_Inner;
            for (--numbits; numbits >= 0; numbits--) {
                bool b = coderstream [numbits];
                if (b) {
                    rank = node.B.Select1 (rank) + 1;
                } else {
                    rank = node.B.Select0 (rank) + 1;
                }
                node = node.Parent as WT_Inner;
            }
            return rank - 1;
        }