diff options
author | 2013-07-17 04:53:17 -0700 | |
---|---|---|
committer | 2013-07-17 04:53:17 -0700 | |
commit | 7a54dc88c4acbfa823d2781021c6a156b9dde494 (patch) | |
tree | 82c466fa7b9b581744a98f389b4b1167ea8799d5 /java | |
parent | 6563a9a8b8b14c21a0b0a8ed1ea9bf6ac2f5df61 (diff) | |
parent | 257750d988b2f6499d5f7b2439c8f46df9ea3369 (diff) | |
download | latinime-7a54dc88c4acbfa823d2781021c6a156b9dde494.tar.gz latinime-7a54dc88c4acbfa823d2781021c6a156b9dde494.tar.xz latinime-7a54dc88c4acbfa823d2781021c6a156b9dde494.zip |
am 257750d9: [FD1] Move parents\' address computation outside
* commit '257750d988b2f6499d5f7b2439c8f46df9ea3369':
[FD1] Move parents' address computation outside
Diffstat (limited to 'java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java | 26 |
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 : " |