From 2aea34fb31f1a8a5fe24cccd1b9aab4908f2f8e2 Mon Sep 17 00:00:00 2001
From: Yuichiro Hanada <yhanada@google.com>
Date: Wed, 26 Sep 2012 13:21:29 +0900
Subject: [PATCH] Add updateParentAddress.

bug: 6669677

Change-Id: I353f8ae53720cdf7a809271a28cb703709609f53
---
 .../latin/makedict/BinaryDictIOUtils.java     | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
index e2c1254cec..b97be05436 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
@@ -246,4 +246,34 @@ public class BinaryDictIOUtils {
         buffer.position(wordPosition);
         buffer.put((byte)newFlags);
     }
+
+    private static void putSInt24(final FusionDictionaryBufferInterface buffer,
+            final int value) {
+        final int absValue = Math.abs(value);
+        buffer.put((byte)(((value < 0 ? 0x80 : 0) | (absValue >> 16)) & 0xFF));
+        buffer.put((byte)((absValue >> 8) & 0xFF));
+        buffer.put((byte)(absValue & 0xFF));
+    }
+
+    /**
+     * Update a parent address in a CharGroup that is addressed by groupOriginAddress.
+     *
+     * @param buffer the buffer to write.
+     * @param groupOriginAddress the address of the group.
+     * @param newParentAddress the absolute address of the parent.
+     * @param formatOptions file format options.
+     */
+    public static void updateParentAddress(final FusionDictionaryBufferInterface buffer,
+            final int groupOriginAddress, final int newParentAddress,
+            final FormatOptions formatOptions) {
+        final int originalPosition = buffer.position();
+        buffer.position(groupOriginAddress);
+        if (!formatOptions.mSupportsDynamicUpdate) {
+            throw new RuntimeException("this file format does not support parent addresses");
+        }
+        final int flags = buffer.readUnsignedByte();
+        final int parentOffset = newParentAddress - groupOriginAddress;
+        putSInt24(buffer, parentOffset);
+        buffer.position(originalPosition);
+    }
 }
-- 
GitLab