Add updateParentAddress.

bug: 6669677

Change-Id: I353f8ae53720cdf7a809271a28cb703709609f53
main
Yuichiro Hanada 2012-09-26 13:21:29 +09:00
parent 2ee70804e9
commit 2aea34fb31
1 changed files with 30 additions and 0 deletions

View File

@ -246,4 +246,34 @@ public class BinaryDictIOUtils {
buffer.position(wordPosition); buffer.position(wordPosition);
buffer.put((byte)newFlags); 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);
}
} }