public virtual float readNgramProb(int wordId, int orderMinusTwo, NgramTrieModel.TrieRange range, NgramTrieQuant quant)
        {
            NgramTrie.NgramSet ngram = this.getNgram(orderMinusTwo);
            int num;

            if ((num = this.findNgram(ngram, wordId, range)) < 0)
            {
                return(0f);
            }
            return(quant.readProb(this.bitArr, ngram.memPtr, ngram.getNgramWeightsOffset(num), orderMinusTwo));
        }
        private int findNgram(NgramTrie.NgramSet ngramSet, int num, NgramTrieModel.TrieRange trieRange)
        {
            trieRange.begin--;
            int num2;

            if ((num2 = this.uniformFind(ngramSet, trieRange, num)) < 0)
            {
                trieRange.setFound(false);
                return(-1);
            }
            if (ngramSet is NgramTrie.MiddleNgramSet)
            {
                ((NgramTrie.MiddleNgramSet)ngramSet).readNextRange(num2, trieRange);
            }
            return(num2);
        }
 private int uniformFind(NgramTrie.NgramSet ngramSet, NgramTrieModel.TrieRange trieRange, int num)
 {
     NgramTrieModel.TrieRange trieRange2 = new NgramTrieModel.TrieRange(0, ngramSet.maxVocab);
     while (trieRange.getWidth() > 1)
     {
         int num2 = trieRange.begin + 1 + this.calculatePivot(num - trieRange2.begin, trieRange2.getWidth(), trieRange.getWidth() - 1);
         int num3 = ngramSet.readNgramWord(num2);
         if (num3 < num)
         {
             trieRange.begin  = num2;
             trieRange2.begin = num3;
         }
         else
         {
             if (num3 <= num)
             {
                 return(num2);
             }
             trieRange.end  = num2;
             trieRange2.end = num3;
         }
     }
     return(-1);
 }