| Index: third_party/android_prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
|
| diff --git a/third_party/android_prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h b/third_party/android_prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fd29c7cee397d7cc93d2c770ef7840a0e7d8034d
|
| --- /dev/null
|
| +++ b/third_party/android_prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
|
| @@ -0,0 +1,255 @@
|
| +/*
|
| + * Copyright (C) 2013, The Android Open Source Project
|
| + *
|
| + * Licensed under the Apache License, Version 2.0 (the "License");
|
| + * you may not use this file except in compliance with the License.
|
| + * You may obtain a copy of the License at
|
| + *
|
| + * http://www.apache.org/licenses/LICENSE-2.0
|
| + *
|
| + * Unless required by applicable law or agreed to in writing, software
|
| + * distributed under the License is distributed on an "AS IS" BASIS,
|
| + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| + * See the License for the specific language governing permissions and
|
| + * limitations under the License.
|
| + */
|
| +
|
| +#ifndef LATINIME_PT_NODE_PARAMS_H
|
| +#define LATINIME_PT_NODE_PARAMS_H
|
| +
|
| +#include <cstring>
|
| +
|
| +#include "third_party/android_prediction/defines.h"
|
| +#include "third_party/android_prediction/suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_reading_utils.h"
|
| +#include "third_party/android_prediction/suggest/policyimpl/dictionary/structure/pt_common/patricia_trie_reading_utils.h"
|
| +#include "third_party/android_prediction/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.h"
|
| +#include "third_party/android_prediction/utils/char_utils.h"
|
| +
|
| +namespace latinime {
|
| +
|
| +// This class has information of a PtNode. This class is immutable.
|
| +class PtNodeParams {
|
| + public:
|
| + // Invalid PtNode.
|
| + PtNodeParams() : mHeadPos(NOT_A_DICT_POS), mFlags(0), mHasMovedFlag(false),
|
| + mParentPos(NOT_A_DICT_POS), mCodePointCount(0), mCodePoints(),
|
| + mTerminalIdFieldPos(NOT_A_DICT_POS), mTerminalId(Ver4DictConstants::NOT_A_TERMINAL_ID),
|
| + mProbabilityFieldPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY),
|
| + mChildrenPosFieldPos(NOT_A_DICT_POS), mChildrenPos(NOT_A_DICT_POS),
|
| + mBigramLinkedNodePos(NOT_A_DICT_POS), mShortcutPos(NOT_A_DICT_POS),
|
| + mBigramPos(NOT_A_DICT_POS), mSiblingPos(NOT_A_DICT_POS) {}
|
| +
|
| + PtNodeParams(const PtNodeParams& ptNodeParams)
|
| + : mHeadPos(ptNodeParams.mHeadPos), mFlags(ptNodeParams.mFlags),
|
| + mHasMovedFlag(ptNodeParams.mHasMovedFlag), mParentPos(ptNodeParams.mParentPos),
|
| + mCodePointCount(ptNodeParams.mCodePointCount), mCodePoints(),
|
| + mTerminalIdFieldPos(ptNodeParams.mTerminalIdFieldPos),
|
| + mTerminalId(ptNodeParams.mTerminalId),
|
| + mProbabilityFieldPos(ptNodeParams.mProbabilityFieldPos),
|
| + mProbability(ptNodeParams.mProbability),
|
| + mChildrenPosFieldPos(ptNodeParams.mChildrenPosFieldPos),
|
| + mChildrenPos(ptNodeParams.mChildrenPos),
|
| + mBigramLinkedNodePos(ptNodeParams.mBigramLinkedNodePos),
|
| + mShortcutPos(ptNodeParams.mShortcutPos), mBigramPos(ptNodeParams.mBigramPos),
|
| + mSiblingPos(ptNodeParams.mSiblingPos) {
|
| + memcpy(mCodePoints, ptNodeParams.getCodePoints(), sizeof(int) * mCodePointCount);
|
| + }
|
| +
|
| + // PtNode read from version 2 dictionary.
|
| + PtNodeParams(const int headPos, const PatriciaTrieReadingUtils::NodeFlags flags,
|
| + const int codePointCount, const int *const codePoints, const int probability,
|
| + const int childrenPos, const int shortcutPos, const int bigramPos,
|
| + const int siblingPos)
|
| + : mHeadPos(headPos), mFlags(flags), mHasMovedFlag(false), mParentPos(NOT_A_DICT_POS),
|
| + mCodePointCount(codePointCount), mCodePoints(), mTerminalIdFieldPos(NOT_A_DICT_POS),
|
| + mTerminalId(Ver4DictConstants::NOT_A_TERMINAL_ID),
|
| + mProbabilityFieldPos(NOT_A_DICT_POS), mProbability(probability),
|
| + mChildrenPosFieldPos(NOT_A_DICT_POS), mChildrenPos(childrenPos),
|
| + mBigramLinkedNodePos(NOT_A_DICT_POS), mShortcutPos(shortcutPos),
|
| + mBigramPos(bigramPos), mSiblingPos(siblingPos) {
|
| + memcpy(mCodePoints, codePoints, sizeof(int) * mCodePointCount);
|
| + }
|
| +
|
| + // PtNode with a terminal id.
|
| + PtNodeParams(const int headPos, const PatriciaTrieReadingUtils::NodeFlags flags,
|
| + const int parentPos, const int codePointCount, const int *const codePoints,
|
| + const int terminalIdFieldPos, const int terminalId, const int probability,
|
| + const int childrenPosFieldPos, const int childrenPos, const int siblingPos)
|
| + : mHeadPos(headPos), mFlags(flags), mHasMovedFlag(true), mParentPos(parentPos),
|
| + mCodePointCount(codePointCount), mCodePoints(),
|
| + mTerminalIdFieldPos(terminalIdFieldPos), mTerminalId(terminalId),
|
| + mProbabilityFieldPos(NOT_A_DICT_POS), mProbability(probability),
|
| + mChildrenPosFieldPos(childrenPosFieldPos), mChildrenPos(childrenPos),
|
| + mBigramLinkedNodePos(NOT_A_DICT_POS), mShortcutPos(terminalId),
|
| + mBigramPos(terminalId), mSiblingPos(siblingPos) {
|
| + memcpy(mCodePoints, codePoints, sizeof(int) * mCodePointCount);
|
| + }
|
| +
|
| + // Construct new params by updating existing PtNode params.
|
| + PtNodeParams(const PtNodeParams *const ptNodeParams,
|
| + const PatriciaTrieReadingUtils::NodeFlags flags, const int parentPos,
|
| + const int codePointCount, const int *const codePoints, const int probability)
|
| + : mHeadPos(ptNodeParams->getHeadPos()), mFlags(flags), mHasMovedFlag(true),
|
| + mParentPos(parentPos), mCodePointCount(codePointCount), mCodePoints(),
|
| + mTerminalIdFieldPos(ptNodeParams->getTerminalIdFieldPos()),
|
| + mTerminalId(ptNodeParams->getTerminalId()),
|
| + mProbabilityFieldPos(ptNodeParams->getProbabilityFieldPos()),
|
| + mProbability(probability),
|
| + mChildrenPosFieldPos(ptNodeParams->getChildrenPosFieldPos()),
|
| + mChildrenPos(ptNodeParams->getChildrenPos()),
|
| + mBigramLinkedNodePos(ptNodeParams->getBigramLinkedNodePos()),
|
| + mShortcutPos(ptNodeParams->getShortcutPos()),
|
| + mBigramPos(ptNodeParams->getBigramsPos()),
|
| + mSiblingPos(ptNodeParams->getSiblingNodePos()) {
|
| + memcpy(mCodePoints, codePoints, sizeof(int) * mCodePointCount);
|
| + }
|
| +
|
| + PtNodeParams(const PatriciaTrieReadingUtils::NodeFlags flags, const int parentPos,
|
| + const int codePointCount, const int *const codePoints, const int probability)
|
| + : mHeadPos(NOT_A_DICT_POS), mFlags(flags), mHasMovedFlag(true), mParentPos(parentPos),
|
| + mCodePointCount(codePointCount), mCodePoints(),
|
| + mTerminalIdFieldPos(NOT_A_DICT_POS),
|
| + mTerminalId(Ver4DictConstants::NOT_A_TERMINAL_ID),
|
| + mProbabilityFieldPos(NOT_A_DICT_POS), mProbability(probability),
|
| + mChildrenPosFieldPos(NOT_A_DICT_POS), mChildrenPos(NOT_A_DICT_POS),
|
| + mBigramLinkedNodePos(NOT_A_DICT_POS), mShortcutPos(NOT_A_DICT_POS),
|
| + mBigramPos(NOT_A_DICT_POS), mSiblingPos(NOT_A_DICT_POS) {
|
| + memcpy(mCodePoints, codePoints, sizeof(int) * mCodePointCount);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool isValid() const {
|
| + return mCodePointCount > 0;
|
| + }
|
| +
|
| + // Head position of the PtNode
|
| + AK_FORCE_INLINE int getHeadPos() const {
|
| + return mHeadPos;
|
| + }
|
| +
|
| + // Flags
|
| + AK_FORCE_INLINE bool isDeleted() const {
|
| + return mHasMovedFlag && DynamicPtReadingUtils::isDeleted(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool willBecomeNonTerminal() const {
|
| + return mHasMovedFlag && DynamicPtReadingUtils::willBecomeNonTerminal(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool hasChildren() const {
|
| + return mChildrenPos != NOT_A_DICT_POS;
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool isTerminal() const {
|
| + return PatriciaTrieReadingUtils::isTerminal(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool isBlacklisted() const {
|
| + return PatriciaTrieReadingUtils::isBlacklisted(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool isNotAWord() const {
|
| + return PatriciaTrieReadingUtils::isNotAWord(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool hasBigrams() const {
|
| + return PatriciaTrieReadingUtils::hasBigrams(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool hasShortcutTargets() const {
|
| + return PatriciaTrieReadingUtils::hasShortcutTargets(mFlags);
|
| + }
|
| +
|
| + AK_FORCE_INLINE bool representsNonWordInfo() const {
|
| + return getCodePointCount() > 0 && !CharUtils::isInUnicodeSpace(getCodePoints()[0])
|
| + && isNotAWord();
|
| + }
|
| +
|
| + AK_FORCE_INLINE int representsBeginningOfSentence() const {
|
| + return getCodePointCount() > 0 && getCodePoints()[0] == CODE_POINT_BEGINNING_OF_SENTENCE
|
| + && isNotAWord();
|
| + }
|
| +
|
| + // Parent node position
|
| + AK_FORCE_INLINE int getParentPos() const {
|
| + return mParentPos;
|
| + }
|
| +
|
| + // Number of code points
|
| + AK_FORCE_INLINE uint8_t getCodePointCount() const {
|
| + return mCodePointCount;
|
| + }
|
| +
|
| + AK_FORCE_INLINE const int *getCodePoints() const {
|
| + return mCodePoints;
|
| + }
|
| +
|
| + // Probability
|
| + AK_FORCE_INLINE int getTerminalIdFieldPos() const {
|
| + return mTerminalIdFieldPos;
|
| + }
|
| +
|
| + AK_FORCE_INLINE int getTerminalId() const {
|
| + return mTerminalId;
|
| + }
|
| +
|
| + // Probability
|
| + AK_FORCE_INLINE int getProbabilityFieldPos() const {
|
| + return mProbabilityFieldPos;
|
| + }
|
| +
|
| + AK_FORCE_INLINE int getProbability() const {
|
| + return mProbability;
|
| + }
|
| +
|
| + // Children PtNode array position
|
| + AK_FORCE_INLINE int getChildrenPosFieldPos() const {
|
| + return mChildrenPosFieldPos;
|
| + }
|
| +
|
| + AK_FORCE_INLINE int getChildrenPos() const {
|
| + return mChildrenPos;
|
| + }
|
| +
|
| + // Bigram linked node position.
|
| + AK_FORCE_INLINE int getBigramLinkedNodePos() const {
|
| + return mBigramLinkedNodePos;
|
| + }
|
| +
|
| + // Shortcutlist position
|
| + AK_FORCE_INLINE int getShortcutPos() const {
|
| + return mShortcutPos;
|
| + }
|
| +
|
| + // Bigrams position
|
| + AK_FORCE_INLINE int getBigramsPos() const {
|
| + return mBigramPos;
|
| + }
|
| +
|
| + // Sibling node position
|
| + AK_FORCE_INLINE int getSiblingNodePos() const {
|
| + return mSiblingPos;
|
| + }
|
| +
|
| + private:
|
| + // This class have a public copy constructor to be used as a return value.
|
| + DISALLOW_ASSIGNMENT_OPERATOR(PtNodeParams);
|
| +
|
| + const int mHeadPos;
|
| + const PatriciaTrieReadingUtils::NodeFlags mFlags;
|
| + const bool mHasMovedFlag;
|
| + const int mParentPos;
|
| + const uint8_t mCodePointCount;
|
| + int mCodePoints[MAX_WORD_LENGTH];
|
| + const int mTerminalIdFieldPos;
|
| + const int mTerminalId;
|
| + const int mProbabilityFieldPos;
|
| + const int mProbability;
|
| + const int mChildrenPosFieldPos;
|
| + const int mChildrenPos;
|
| + const int mBigramLinkedNodePos;
|
| + const int mShortcutPos;
|
| + const int mBigramPos;
|
| + const int mSiblingPos;
|
| +};
|
| +} // namespace latinime
|
| +#endif /* LATINIME_PT_NODE_PARAMS_H */
|
|
|