mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Add Ver4DictUpdater.
Change-Id: I986ab26faf535fc4bc98443053f534eced9d048f
This commit is contained in:
parent
75d60e821c
commit
e4e0add9fb
@ -57,7 +57,7 @@ public class Ver3DictUpdater extends Ver3DictDecoder implements DictUpdater {
|
||||
public void deleteWord(final String word) throws IOException, UnsupportedFormatException {
|
||||
if (mOutStream == null) openStreamAndBuffer();
|
||||
mDictBuffer.position(0);
|
||||
super.readHeader();
|
||||
readHeader();
|
||||
final int wordPos = getTerminalPosition(word);
|
||||
if (wordPos != FormatSpec.NOT_VALID_WORD) {
|
||||
mDictBuffer.position(wordPos);
|
||||
|
@ -48,7 +48,7 @@ public class Ver4DictDecoder extends AbstractDictDecoder {
|
||||
|
||||
private final File mDictDirectory;
|
||||
private final DictionaryBufferFactory mBufferFactory;
|
||||
private DictBuffer mDictBuffer;
|
||||
protected DictBuffer mDictBuffer;
|
||||
private DictBuffer mFrequencyBuffer;
|
||||
private DictBuffer mTerminalAddressTableBuffer;
|
||||
private DictBuffer mBigramBuffer;
|
||||
|
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.inputmethod.latin.makedict;
|
||||
|
||||
import com.android.inputmethod.annotations.UsedForTesting;
|
||||
import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* An implementation of DictUpdater for version 4 binary dictionary.
|
||||
*/
|
||||
@UsedForTesting
|
||||
public class Ver4DictUpdater extends Ver4DictDecoder implements DictUpdater {
|
||||
|
||||
@UsedForTesting
|
||||
public Ver4DictUpdater(final File dictDirectory, final int factoryType) {
|
||||
// DictUpdater must have an updatable DictBuffer.
|
||||
super(dictDirectory, ((factoryType & MASK_DICTBUFFER) == USE_BYTEARRAY)
|
||||
? USE_BYTEARRAY : USE_WRITABLE_BYTEBUFFER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteWord(final String word) throws IOException, UnsupportedFormatException {
|
||||
if (mDictBuffer == null) openDictBuffer();
|
||||
readHeader();
|
||||
final int wordPos = getTerminalPosition(word);
|
||||
if (wordPos != FormatSpec.NOT_VALID_WORD) {
|
||||
mDictBuffer.position(wordPos);
|
||||
final int flags = PtNodeReader.readPtNodeOptionFlags(mDictBuffer);
|
||||
mDictBuffer.position(wordPos);
|
||||
mDictBuffer.put((byte) DynamicBinaryDictIOUtils.markAsDeleted(flags));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertWord(final String word, final int frequency,
|
||||
final ArrayList<WeightedString> bigramStrings, final ArrayList<WeightedString> shortcuts,
|
||||
final boolean isNotAWord, final boolean isBlackListEntry)
|
||||
throws IOException, UnsupportedFormatException {
|
||||
// TODO: Implement this method.
|
||||
}
|
||||
}
|
@ -660,6 +660,8 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||
final DictUpdater dictUpdater;
|
||||
if (formatOptions.mVersion == 3) {
|
||||
dictUpdater = new Ver3DictUpdater(file, DictDecoder.USE_WRITABLE_BYTEBUFFER);
|
||||
} else if (formatOptions.mVersion == 4) {
|
||||
dictUpdater = new Ver4DictUpdater(file, DictDecoder.USE_WRITABLE_BYTEBUFFER);
|
||||
} else {
|
||||
throw new RuntimeException("DictUpdater for version " + formatOptions.mVersion
|
||||
+ " doesn't exist.");
|
||||
@ -684,5 +686,6 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||
|
||||
public void testDeleteWord() {
|
||||
runTestDeleteWord(VERSION3_WITH_DYNAMIC_UPDATE);
|
||||
runTestDeleteWord(VERSION4_WITH_DYNAMIC_UPDATE);
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||
private static final String TEST_DICT_FILE_EXTENSION = ".testDict";
|
||||
|
||||
private static final int VERSION3 = 3;
|
||||
private static final int VERSION4 = 4;
|
||||
|
||||
private static final String[] CHARACTERS = {
|
||||
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
|
||||
|
Loading…
Reference in New Issue
Block a user