public int Select(int symbol, int rank)
{
var symnode = this.Alphabet [symbol];
//if (symnode == null || symnode.Count < rank) {
if (symnode == null || rank == 0) {
return -1;
}
WTM_Inner node = symnode.Parent as WTM_Inner;
var ministring = this.SymbolCoder.Encode (symbol, null);
ministring.Reverse();
var mlen = ministring.Count;
for (int i = 0; i < mlen; i++) {
var code = ministring[i];
rank = node.SEQ.Select(code.symbol, rank) + 1;
node = node.Parent as WTM_Inner;
}
return rank - 1;
}