Use word id to get shortcut iterator.

Bug: 14425059
Change-Id: I1b35a139bd29f70b328cbc82648783b99f633d72
diff --git a/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h b/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h
index e62543d..36fa6e8 100644
--- a/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h
+++ b/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h
@@ -63,7 +63,7 @@
     virtual void iterateNgramEntries(const int *const prevWordIds,
             NgramListener *const listener) const = 0;
 
-    virtual BinaryDictionaryShortcutIterator getShortcutIterator(const int ptNodePos) const = 0;
+    virtual BinaryDictionaryShortcutIterator getShortcutIterator(const int wordId) const = 0;
 
     virtual const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const = 0;
 
diff --git a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
index bd2aa5f..ad860c4 100644
--- a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
+++ b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
@@ -141,7 +141,7 @@
     if (!terminalDicNode->hasMultipleWords()) {
         BinaryDictionaryShortcutIterator shortcutIt =
                 traverseSession->getDictionaryStructurePolicy()->getShortcutIterator(
-                        terminalDicNode->getPtNodePos());
+                        terminalDicNode->getWordId());
         const bool sameAsTyped = scoringPolicy->sameAsTyped(traverseSession, terminalDicNode);
         outputShortcuts(&shortcutIt, finalScore, sameAsTyped, outSuggestionResults);
     }
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp
index eb7d451..28c5eb1 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp
@@ -175,8 +175,8 @@
 }
 
 BinaryDictionaryShortcutIterator Ver4PatriciaTriePolicy::getShortcutIterator(
-        const int ptNodePos) const {
-    const int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
+        const int wordId) const {
+    const int shortcutPos = getShortcutPositionOfPtNode(getTerminalPtNodePosFromWordId(wordId));
     return BinaryDictionaryShortcutIterator(&mShortcutPolicy, shortcutPos);
 }
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h
index 55b7103..bead2ff 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h
@@ -97,7 +97,7 @@
 
     void iterateNgramEntries(const int *const prevWordIds, NgramListener *const listener) const;
 
-    BinaryDictionaryShortcutIterator getShortcutIterator(const int ptNodePos) const;
+    BinaryDictionaryShortcutIterator getShortcutIterator(const int wordId) const;
 
     const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const {
         return mHeaderPolicy;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
index 12196fc..88fe3ef 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
@@ -342,8 +342,8 @@
 }
 
 BinaryDictionaryShortcutIterator PatriciaTriePolicy::getShortcutIterator(
-        const int ptNodePos) const {
-    const int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
+        const int wordId) const {
+    const int shortcutPos = getShortcutPositionOfPtNode(getTerminalPtNodePosFromWordId(wordId));
     return BinaryDictionaryShortcutIterator(&mShortcutListPolicy, shortcutPos);
 }
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
index 95963be..08c3e1d 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
@@ -72,7 +72,7 @@
 
     void iterateNgramEntries(const int *const prevWordIds, NgramListener *const listener) const;
 
-    BinaryDictionaryShortcutIterator getShortcutIterator(const int ptNodePos) const;
+    BinaryDictionaryShortcutIterator getShortcutIterator(const int wordId) const;
 
     const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const {
         return &mHeaderPolicy;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp
index 04f43f6..e11b94c 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp
@@ -157,8 +157,8 @@
 }
 
 BinaryDictionaryShortcutIterator Ver4PatriciaTriePolicy::getShortcutIterator(
-        const int ptNodePos) const {
-    const int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
+        const int wordId) const {
+    const int shortcutPos = getShortcutPositionOfWord(wordId);
     return BinaryDictionaryShortcutIterator(&mShortcutPolicy, shortcutPos);
 }
 
@@ -180,10 +180,12 @@
     }
 }
 
-int Ver4PatriciaTriePolicy::getShortcutPositionOfPtNode(const int ptNodePos) const {
-    if (ptNodePos == NOT_A_DICT_POS) {
+int Ver4PatriciaTriePolicy::getShortcutPositionOfWord(const int wordId) const {
+    if (wordId == NOT_A_WORD_ID) {
         return NOT_A_DICT_POS;
     }
+    const int ptNodePos =
+            mBuffers->getTerminalPositionLookupTable()->getTerminalPtNodePosition(wordId);
     const PtNodeParams ptNodeParams(mNodeReader.fetchPtNodeParamsInBufferFromPtNodePos(ptNodePos));
     if (ptNodeParams.isDeleted()) {
         return NOT_A_DICT_POS;
@@ -511,7 +513,7 @@
     }
     // Fetch shortcut information.
     std::vector<UnigramProperty::ShortcutProperty> shortcuts;
-    int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
+    int shortcutPos = getShortcutPositionOfWord(wordId);
     if (shortcutPos != NOT_A_DICT_POS) {
         int shortcutTarget[MAX_WORD_LENGTH];
         const ShortcutDictContent *const shortcutDictContent =
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h
index 8435726..9dc83d8 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h
@@ -74,7 +74,7 @@
 
     void iterateNgramEntries(const int *const prevWordIds, NgramListener *const listener) const;
 
-    BinaryDictionaryShortcutIterator getShortcutIterator(const int ptNodePos) const;
+    BinaryDictionaryShortcutIterator getShortcutIterator(const int wordId) const;
 
     const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const {
         return mHeaderPolicy;
@@ -135,7 +135,7 @@
     std::vector<int> mTerminalPtNodePositionsForIteratingWords;
     mutable bool mIsCorrupted;
 
-    int getShortcutPositionOfPtNode(const int ptNodePos) const;
+    int getShortcutPositionOfWord(const int wordId) const;
 };
 } // namespace latinime
 #endif // LATINIME_VER4_PATRICIA_TRIE_POLICY_H