void DicTraverseSession::init(const Dictionary *const dictionary,
        const NgramContext *const ngramContext, const SuggestOptions *const suggestOptions) {
    mDictionary = dictionary;
    mMultiWordCostMultiplier = getDictionaryStructurePolicy()->getHeaderStructurePolicy()
            ->getMultiWordCostMultiplier();
    mSuggestOptions = suggestOptions;
    mPrevWordIdCount = ngramContext->getPrevWordIds(getDictionaryStructurePolicy(),
            &mPrevWordIdArray, true /* tryLowerCaseSearch */).size();
}
Esempio n. 2
0
int Dictionary::getNgramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word,
        int length) const {
    TimeKeeper::setCurrentTime();
    int nextWordPos = mDictionaryStructureWithBufferPolicy->getTerminalPtNodePositionOfWord(word,
            length, false /* forceLowerCaseSearch */);
    if (NOT_A_DICT_POS == nextWordPos) return NOT_A_PROBABILITY;
    if (!prevWordsInfo) {
        return getDictionaryStructurePolicy()->getProbabilityOfPtNode(
                nullptr /* prevWordsPtNodePos */, nextWordPos);
    }
    int prevWordsPtNodePos[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
    prevWordsInfo->getPrevWordsTerminalPtNodePos(
            mDictionaryStructureWithBufferPolicy.get(), prevWordsPtNodePos,
            true /* tryLowerCaseSearch */);
    return getDictionaryStructurePolicy()->getProbabilityOfPtNode(prevWordsPtNodePos, nextWordPos);
}
void DicTraverseSession::initializeProximityInfoStates(const int *const inputCodePoints,
        const int *const inputXs, const int *const inputYs, const int *const times,
        const int *const pointerIds, const int inputSize, const float maxSpatialDistance,
        const int maxPointerCount) {
    ASSERT(1 <= maxPointerCount && maxPointerCount <= MAX_POINTER_COUNT_G);
    mInputSize = 0;
    for (int i = 0; i < maxPointerCount; ++i) {
        mProximityInfoStates[i].initInputParams(i, maxSpatialDistance, getProximityInfo(),
                inputCodePoints, inputSize, inputXs, inputYs, times, pointerIds,
                // Right now the line below is trying to figure out whether this is a gesture by
                // looking at the pointer count and assuming whatever is above the cutoff is
                // a gesture and whatever is below is type. This is hacky and incorrect, we
                // should pass the correct information instead.
                maxPointerCount == MAX_POINTER_COUNT_G,
                getDictionaryStructurePolicy()->getHeaderStructurePolicy()->getLocale());
        mInputSize += mProximityInfoStates[i].size();
    }
}