Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(426)

Unified Diff: third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h

Issue 1247903003: Add spellcheck and word suggestion to the prediction service (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
diff --git a/third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h b/third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
new file mode 100644
index 0000000000000000000000000000000000000000..c41e437edd87aa6387b94ddc356adbb1d810932b
--- /dev/null
+++ b/third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
@@ -0,0 +1,298 @@
+/*
+ * 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/prediction/defines.h"
+#include "third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_reading_utils.h"
+#include "third_party/prediction/suggest/policyimpl/dictionary/structure/pt_common/patricia_trie_reading_utils.h"
+#include "third_party/prediction/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.h"
+#include "third_party/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 */

Powered by Google App Engine
This is Rietveld 408576698