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