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

Unified Diff: third_party/prediction/suggest/core/dicnode/internal/dic_node_properties.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/core/dicnode/internal/dic_node_properties.h
diff --git a/third_party/prediction/suggest/core/dicnode/internal/dic_node_properties.h b/third_party/prediction/suggest/core/dicnode/internal/dic_node_properties.h
new file mode 100644
index 0000000000000000000000000000000000000000..b0072837a393a5a170d4bd87a5dbd8c442ce25ff
--- /dev/null
+++ b/third_party/prediction/suggest/core/dicnode/internal/dic_node_properties.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2012 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_DIC_NODE_PROPERTIES_H
+#define LATINIME_DIC_NODE_PROPERTIES_H
+
+#include <cstdint>
+
+#include "third_party/prediction/defines.h"
+
+namespace latinime {
+
+/**
+ * PtNode information related to the DicNode from the lexicon trie.
+ */
+class DicNodeProperties {
+ public:
+ AK_FORCE_INLINE DicNodeProperties()
+ : mPtNodePos(NOT_A_DICT_POS),
+ mChildrenPtNodeArrayPos(NOT_A_DICT_POS),
+ mProbability(NOT_A_PROBABILITY),
+ mDicNodeCodePoint(NOT_A_CODE_POINT),
+ mIsTerminal(false),
+ mHasChildrenPtNodes(false),
+ mIsBlacklistedOrNotAWord(false),
+ mDepth(0),
+ mLeavingDepth(0) {}
+
+ ~DicNodeProperties() {}
+
+ // Should be called only once per DicNode is initialized.
+ void init(const int pos,
+ const int childrenPos,
+ const int nodeCodePoint,
+ const int probability,
+ const bool isTerminal,
+ const bool hasChildren,
+ const bool isBlacklistedOrNotAWord,
+ const uint16_t depth,
+ const uint16_t leavingDepth,
+ const int* const prevWordsNodePos) {
+ mPtNodePos = pos;
+ mChildrenPtNodeArrayPos = childrenPos;
+ mDicNodeCodePoint = nodeCodePoint;
+ mProbability = probability;
+ mIsTerminal = isTerminal;
+ mHasChildrenPtNodes = hasChildren;
+ mIsBlacklistedOrNotAWord = isBlacklistedOrNotAWord;
+ mDepth = depth;
+ mLeavingDepth = leavingDepth;
+ memmove(mPrevWordsTerminalPtNodePos, prevWordsNodePos,
+ sizeof(mPrevWordsTerminalPtNodePos));
+ }
+
+ // Init for root with prevWordsPtNodePos which is used for n-gram
+ void init(const int rootPtNodeArrayPos, const int* const prevWordsNodePos) {
+ mPtNodePos = NOT_A_DICT_POS;
+ mChildrenPtNodeArrayPos = rootPtNodeArrayPos;
+ mDicNodeCodePoint = NOT_A_CODE_POINT;
+ mProbability = NOT_A_PROBABILITY;
+ mIsTerminal = false;
+ mHasChildrenPtNodes = true;
+ mIsBlacklistedOrNotAWord = false;
+ mDepth = 0;
+ mLeavingDepth = 0;
+ memmove(mPrevWordsTerminalPtNodePos, prevWordsNodePos,
+ sizeof(mPrevWordsTerminalPtNodePos));
+ }
+
+ void initByCopy(const DicNodeProperties* const dicNodeProp) {
+ mPtNodePos = dicNodeProp->mPtNodePos;
+ mChildrenPtNodeArrayPos = dicNodeProp->mChildrenPtNodeArrayPos;
+ mDicNodeCodePoint = dicNodeProp->mDicNodeCodePoint;
+ mProbability = dicNodeProp->mProbability;
+ mIsTerminal = dicNodeProp->mIsTerminal;
+ mHasChildrenPtNodes = dicNodeProp->mHasChildrenPtNodes;
+ mIsBlacklistedOrNotAWord = dicNodeProp->mIsBlacklistedOrNotAWord;
+ mDepth = dicNodeProp->mDepth;
+ mLeavingDepth = dicNodeProp->mLeavingDepth;
+ memmove(mPrevWordsTerminalPtNodePos,
+ dicNodeProp->mPrevWordsTerminalPtNodePos,
+ sizeof(mPrevWordsTerminalPtNodePos));
+ }
+
+ // Init as passing child
+ void init(const DicNodeProperties* const dicNodeProp, const int codePoint) {
+ mPtNodePos = dicNodeProp->mPtNodePos;
+ mChildrenPtNodeArrayPos = dicNodeProp->mChildrenPtNodeArrayPos;
+ mDicNodeCodePoint =
+ codePoint; // Overwrite the node char of a passing child
+ mProbability = dicNodeProp->mProbability;
+ mIsTerminal = dicNodeProp->mIsTerminal;
+ mHasChildrenPtNodes = dicNodeProp->mHasChildrenPtNodes;
+ mIsBlacklistedOrNotAWord = dicNodeProp->mIsBlacklistedOrNotAWord;
+ mDepth = dicNodeProp->mDepth + 1; // Increment the depth of a passing child
+ mLeavingDepth = dicNodeProp->mLeavingDepth;
+ memmove(mPrevWordsTerminalPtNodePos,
+ dicNodeProp->mPrevWordsTerminalPtNodePos,
+ sizeof(mPrevWordsTerminalPtNodePos));
+ }
+
+ int getPtNodePos() const { return mPtNodePos; }
+
+ int getChildrenPtNodeArrayPos() const { return mChildrenPtNodeArrayPos; }
+
+ int getProbability() const { return mProbability; }
+
+ int getDicNodeCodePoint() const { return mDicNodeCodePoint; }
+
+ uint16_t getDepth() const { return mDepth; }
+
+ // TODO: Move to output?
+ uint16_t getLeavingDepth() const { return mLeavingDepth; }
+
+ bool isTerminal() const { return mIsTerminal; }
+
+ bool hasChildren() const {
+ return mHasChildrenPtNodes || mDepth != mLeavingDepth;
+ }
+
+ bool isBlacklistedOrNotAWord() const { return mIsBlacklistedOrNotAWord; }
+
+ const int* getPrevWordsTerminalPtNodePos() const {
+ return mPrevWordsTerminalPtNodePos;
+ }
+
+ private:
+ // Caution!!!
+ // Use a default copy constructor and an assign operator because shallow
+ // copies are ok
+ // for this class
+ int mPtNodePos;
+ int mChildrenPtNodeArrayPos;
+ int mProbability;
+ int mDicNodeCodePoint;
+ bool mIsTerminal;
+ bool mHasChildrenPtNodes;
+ bool mIsBlacklistedOrNotAWord;
+ uint16_t mDepth;
+ uint16_t mLeavingDepth;
+ int mPrevWordsTerminalPtNodePos[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
+};
+} // namespace latinime
+#endif // LATINIME_DIC_NODE_PROPERTIES_H

Powered by Google App Engine
This is Rietveld 408576698