From 8e464d41cc891b7ef1c91b4cbeae68b5d6d56864 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Mon, 26 Dec 2011 17:02:05 +0900
Subject: [PATCH] Fill in the format-specific shortcut reading methods (A3)

Change-Id: Ie5d8b344ed46873c92f3ef878a1e45017eb699c6
---
 native/src/terminal_attributes.h | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/native/src/terminal_attributes.h b/native/src/terminal_attributes.h
index dcfeba4509..1f98159363 100644
--- a/native/src/terminal_attributes.h
+++ b/native/src/terminal_attributes.h
@@ -30,20 +30,28 @@ class TerminalAttributes {
  public:
     class ShortcutIterator {
         const uint8_t* const mDict;
+        bool mHasNextShortcutTarget;
         int mPos;
 
      public:
-        ShortcutIterator(const uint8_t* const dict, const int pos) : mDict(dict), mPos(pos) {
+        ShortcutIterator(const uint8_t* dict, const int pos, const uint8_t flags) : mDict(dict),
+                mPos(pos) {
+            mHasNextShortcutTarget = (0 != (flags & UnigramDictionary::FLAG_HAS_SHORTCUT_TARGETS));
         }
 
         inline bool hasNextShortcutTarget() const {
-            // TODO: stub method. Fill this in.
-            return false;
+            return mHasNextShortcutTarget;
         }
 
+        // Gets the shortcut target itself as a uint16_t string. For parameters and return value
+        // see BinaryFormat::getWordAtAddress.
         inline int getNextShortcutTarget(const int maxDepth, uint16_t* outWord) {
-            // TODO: stub method. Fill this in.
-            return 0;
+            const int shortcutFlags = BinaryFormat::getFlagsAndForwardPointer(mDict, &mPos);
+            mHasNextShortcutTarget =
+                    0 != (shortcutFlags & UnigramDictionary::FLAG_ATTRIBUTE_HAS_NEXT);
+            int shortcutAddress =
+                    BinaryFormat::getAttributeAddressAndForwardPointer(mDict, shortcutFlags, &mPos);
+            return BinaryFormat::getWordAtAddress(mDict, shortcutAddress, maxDepth, outWord);
         }
     };
 
@@ -58,12 +66,11 @@ class TerminalAttributes {
     }
 
     inline bool isShortcutOnly() const {
-        // TODO: stub method. Fill this in.
-        return false;
+        return 0 != (mFlags & UnigramDictionary::FLAG_IS_SHORTCUT_ONLY);
     }
 
     inline ShortcutIterator getShortcutIterator() const {
-        return ShortcutIterator(mDict, mStartPos);
+        return ShortcutIterator(mDict, mStartPos, mFlags);
     }
 };
 } // namespace latinime
-- 
GitLab