123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard/* 223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * Copyright (C) 2013 The Android Open Source Project 323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * 423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); 523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * you may not use this file except in compliance with the License. 623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * You may obtain a copy of the License at 723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * 823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * http://www.apache.org/licenses/LICENSE-2.0 923d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * 1023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * Unless required by applicable law or agreed to in writing, software 1123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * distributed under the License is distributed on an "AS IS" BASIS, 1223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * See the License for the specific language governing permissions and 1423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * limitations under the License. 1523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard */ 1623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 17b03447e1af950888d901fccbd2cc3e3b4a11ef98Ken Wakasapackage com.android.inputmethod.latin.utils; 1823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 1977bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanadaimport com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer; 2023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 2123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard/** 2223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * This class provides an implementation for the FusionDictionary buffer interface that is backed 2323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard * by a simpled byte array. It allows to create a binary dictionary in memory. 2423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard */ 2577bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanadapublic final class ByteArrayDictBuffer implements DictBuffer { 2623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard private byte[] mBuffer; 2723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard private int mPosition; 2823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 2977bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada public ByteArrayDictBuffer(final byte[] buffer) { 3023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard mBuffer = buffer; 3123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard mPosition = 0; 3223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 3323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 3423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 3523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int readUnsignedByte() { 3623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return mBuffer[mPosition++] & 0xFF; 3723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 3823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 3923d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 4023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int readUnsignedShort() { 4123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard final int retval = readUnsignedByte(); 4223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return (retval << 8) + readUnsignedByte(); 4323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 4423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 4523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 4623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int readUnsignedInt24() { 4723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard final int retval = readUnsignedShort(); 4823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return (retval << 8) + readUnsignedByte(); 4923d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 5023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 5123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 5223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int readInt() { 5323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard final int retval = readUnsignedShort(); 5423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return (retval << 16) + readUnsignedShort(); 5523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 5623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 5723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 5823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int position() { 5923d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return mPosition; 6023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 6123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 6223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 6323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public void position(int position) { 6423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard mPosition = position; 6523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 6623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 6723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 6823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public void put(final byte b) { 6923d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard mBuffer[mPosition++] = b; 7023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 7123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 7223d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 7323d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int limit() { 7423d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return mBuffer.length - 1; 7523d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 7623d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard 7723d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard @Override 7823d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard public int capacity() { 7923d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard return mBuffer.length; 8023d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard } 8123d4eb55ba0271d56519b16c76eebbeb3e0774a9Jean Chalard} 82