Merge "Add updateChildrenAddress."
commit
b88c8ac8e4
|
@ -17,6 +17,7 @@
|
||||||
package com.android.inputmethod.latin.makedict;
|
package com.android.inputmethod.latin.makedict;
|
||||||
|
|
||||||
import com.android.inputmethod.latin.Constants;
|
import com.android.inputmethod.latin.Constants;
|
||||||
|
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.CharEncoding;
|
||||||
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface;
|
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface;
|
||||||
import com.android.inputmethod.latin.makedict.FormatSpec.FileHeader;
|
import com.android.inputmethod.latin.makedict.FormatSpec.FileHeader;
|
||||||
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
|
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
|
||||||
|
@ -279,4 +280,39 @@ public final class BinaryDictIOUtils {
|
||||||
putSInt24(buffer, parentOffset);
|
putSInt24(buffer, parentOffset);
|
||||||
buffer.position(originalPosition);
|
buffer.position(originalPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void skipString(final FusionDictionaryBufferInterface buffer,
|
||||||
|
final boolean hasMultipleChars) {
|
||||||
|
if (hasMultipleChars) {
|
||||||
|
int character = CharEncoding.readChar(buffer);
|
||||||
|
while (character != FormatSpec.INVALID_CHARACTER) {
|
||||||
|
character = CharEncoding.readChar(buffer);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
CharEncoding.readChar(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a children address in a CharGroup that is addressed by groupOriginAddress.
|
||||||
|
*
|
||||||
|
* @param buffer the buffer to write.
|
||||||
|
* @param groupOriginAddress the address of the group.
|
||||||
|
* @param newChildrenAddress the absolute address of the child.
|
||||||
|
* @param formatOptions file format options.
|
||||||
|
*/
|
||||||
|
public static void updateChildrenAddress(final FusionDictionaryBufferInterface buffer,
|
||||||
|
final int groupOriginAddress, final int newChildrenAddress,
|
||||||
|
final FormatOptions formatOptions) {
|
||||||
|
final int originalPosition = buffer.position();
|
||||||
|
buffer.position(groupOriginAddress);
|
||||||
|
final int flags = buffer.readUnsignedByte();
|
||||||
|
final int parentAddress = BinaryDictInputOutput.readParentAddress(buffer, formatOptions);
|
||||||
|
skipString(buffer, (flags & FormatSpec.FLAG_HAS_MULTIPLE_CHARS) != 0);
|
||||||
|
if ((FormatSpec.FLAG_IS_TERMINAL) != 0) buffer.readUnsignedByte();
|
||||||
|
final int childrenOffset = newChildrenAddress == FormatSpec.NO_CHILDREN_ADDRESS
|
||||||
|
? FormatSpec.NO_CHILDREN_ADDRESS : newChildrenAddress - buffer.position();
|
||||||
|
putSInt24(buffer, childrenOffset);
|
||||||
|
buffer.position(originalPosition);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,8 +124,7 @@ public final class BinaryDictInputOutput {
|
||||||
/**
|
/**
|
||||||
* A class grouping utility function for our specific character encoding.
|
* A class grouping utility function for our specific character encoding.
|
||||||
*/
|
*/
|
||||||
private static final class CharEncoding {
|
static final class CharEncoding {
|
||||||
|
|
||||||
private static final int MINIMAL_ONE_BYTE_CHARACTER_VALUE = 0x20;
|
private static final int MINIMAL_ONE_BYTE_CHARACTER_VALUE = 0x20;
|
||||||
private static final int MAXIMAL_ONE_BYTE_CHARACTER_VALUE = 0xFF;
|
private static final int MAXIMAL_ONE_BYTE_CHARACTER_VALUE = 0xFF;
|
||||||
|
|
||||||
|
@ -263,7 +262,7 @@ public final class BinaryDictInputOutput {
|
||||||
* @param buffer the buffer, positioned over an encoded character.
|
* @param buffer the buffer, positioned over an encoded character.
|
||||||
* @return the character code.
|
* @return the character code.
|
||||||
*/
|
*/
|
||||||
private static int readChar(final FusionDictionaryBufferInterface buffer) {
|
static int readChar(final FusionDictionaryBufferInterface buffer) {
|
||||||
int character = buffer.readUnsignedByte();
|
int character = buffer.readUnsignedByte();
|
||||||
if (!fitsOnOneByte(character)) {
|
if (!fitsOnOneByte(character)) {
|
||||||
if (FormatSpec.GROUP_CHARACTERS_TERMINATOR == character) {
|
if (FormatSpec.GROUP_CHARACTERS_TERMINATOR == character) {
|
||||||
|
@ -1219,7 +1218,7 @@ public final class BinaryDictInputOutput {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int readParentAddress(final FusionDictionaryBufferInterface buffer,
|
static int readParentAddress(final FusionDictionaryBufferInterface buffer,
|
||||||
final FormatOptions formatOptions) {
|
final FormatOptions formatOptions) {
|
||||||
if (supportsDynamicUpdate(formatOptions)) {
|
if (supportsDynamicUpdate(formatOptions)) {
|
||||||
final int parentAddress = buffer.readUnsignedInt24();
|
final int parentAddress = buffer.readUnsignedInt24();
|
||||||
|
|
Loading…
Reference in New Issue