aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2013-07-10 18:28:34 +0900
committerJean Chalard <jchalard@google.com>2013-07-17 20:47:53 +0900
commit257750d988b2f6499d5f7b2439c8f46df9ea3369 (patch)
tree215808c49b68ec08831450262e87b3fde8397ea0 /java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
parent4d5939fc0acd53345e6bb8a42c7c0c95a23da81a (diff)
downloadlatinime-257750d988b2f6499d5f7b2439c8f46df9ea3369.tar.gz
latinime-257750d988b2f6499d5f7b2439c8f46df9ea3369.tar.xz
latinime-257750d988b2f6499d5f7b2439c8f46df9ea3369.zip
[FD1] Move parents' address computation outside
There is no need to do it repeatedly in this loop: it's clearer and faster to do it at the end only. Bug: 8526576 Change-Id: I707571179c89479830891ec6d4fd06a9fffed7c1
Diffstat (limited to 'java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java')
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java26
1 files changed, 23 insertions, 3 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
index 467f6a053..29e7c28f3 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
@@ -559,9 +559,6 @@ public final class BinaryDictInputOutput {
} else if (null != group.mChildren) {
final int offsetBasePoint = groupSize + node.mCachedAddress + size;
final int offset = group.mChildren.mCachedAddress - offsetBasePoint;
- // assign my address to children's parent address
- group.mChildren.mCachedParentAddress = group.mCachedAddress
- - group.mChildren.mCachedAddress;
if (formatOptions.mSupportsDynamicUpdate) {
groupSize += FormatSpec.SIGNED_CHILDREN_ADDRESS_SIZE;
} else {
@@ -621,6 +618,26 @@ public final class BinaryDictInputOutput {
}
/**
+ * Compute the cached parent addresses after all has been updated.
+ *
+ * The parent addresses are used by some binary formats at write-to-disk time. Not all formats
+ * need them. In particular, version 2 does not need them, and version 3 does.
+ *
+ * @param flatNodes the flat array of nodes to fill in
+ */
+ private static void computeParentAddresses(final ArrayList<Node> flatNodes) {
+ for (final Node node : flatNodes) {
+ for (CharGroup group : node.mData) {
+ if (null != group.mChildren) {
+ // assign my address to children's parent address
+ group.mChildren.mCachedParentAddress = group.mCachedAddress
+ - group.mChildren.mCachedAddress;
+ }
+ }
+ }
+ }
+
+ /**
* Compute the addresses and sizes of an ordered node array.
*
* This method takes a node array and will update its cached address and size values
@@ -660,6 +677,9 @@ public final class BinaryDictInputOutput {
if (passes > MAX_PASSES) throw new RuntimeException("Too many passes - probably a bug");
} while (changesDone);
+ if (formatOptions.mSupportsDynamicUpdate) {
+ computeParentAddresses(flatNodes);
+ }
final Node lastNode = flatNodes.get(flatNodes.size() - 1);
MakedictLog.i("Compression complete in " + passes + " passes.");
MakedictLog.i("After address compression : "