138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka/* 238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * Copyright (C) 2012 The Android Open Source Project 338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * 438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * Licensed under the Apache License, Version 2.0 (the "License"); 538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * you may not use this file except in compliance with the License. 638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * You may obtain a copy of the License at 738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * 838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * http://www.apache.org/licenses/LICENSE-2.0 938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * 1038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * Unless required by applicable law or agreed to in writing, software 1138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * distributed under the License is distributed on an "AS IS" BASIS, 1238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * See the License for the specific language governing permissions and 1438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka * limitations under the License. 1538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka */ 1638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 1738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka#ifndef LATINIME_DIC_NODE_STATE_INPUT_H 1838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka#define LATINIME_DIC_NODE_STATE_INPUT_H 1938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 2038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka#include "defines.h" 2138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 2238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataokanamespace latinime { 2338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 2438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka// TODO: Have a .cpp for this class 2538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataokaclass DicNodeStateInput { 2638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka public: 2738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka DicNodeStateInput() {} 28632c9aca5bbae49be278cf3e88d12b364fbd6fc8Keisuke Kuroyanagi ~DicNodeStateInput() {} 2938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 3038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka void init() { 3138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka for (int i = 0; i < MAX_POINTER_COUNT_G; i++) { 3238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka // TODO: The initial value for mInputIndex should be -1? 3338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka //mInputIndex[i] = i == 0 ? 0 : -1; 3438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mInputIndex[i] = 0; 3538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mPrevCodePoint[i] = NOT_A_CODE_POINT; 3638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mTerminalDiffCost[i] = static_cast<float>(MAX_VALUE_FOR_WEIGHTING); 3738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 3838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 3938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 4038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka void init(const DicNodeStateInput *const src, const bool resetTerminalDiffCost) { 4138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka for (int i = 0; i < MAX_POINTER_COUNT_G; i++) { 4238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mInputIndex[i] = src->mInputIndex[i]; 4338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mPrevCodePoint[i] = src->mPrevCodePoint[i]; 4460a169f0c34bf0da89c420d99bfff5c2556f3fbfKeisuke Kuroynagi mTerminalDiffCost[i] = resetTerminalDiffCost ? 4560a169f0c34bf0da89c420d99bfff5c2556f3fbfKeisuke Kuroynagi static_cast<float>(MAX_VALUE_FOR_WEIGHTING) : src->mTerminalDiffCost[i]; 4638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 4738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 4838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 4938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka void updateInputIndexG(const int pointerId, const int inputIndex, 5038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka const int prevCodePoint, const float terminalDiffCost, const float rawLength) { 5138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mInputIndex[pointerId] = inputIndex; 5238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mPrevCodePoint[pointerId] = prevCodePoint; 5338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mTerminalDiffCost[pointerId] = terminalDiffCost; 5438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 5538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 56eddbb7ac88c3174ffdc38a9dd799029302f55d03Keisuke Kuroyanagi void initByCopy(const DicNodeStateInput *const src) { 5738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka init(src, false); 5838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 5938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 6038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka // For transposition 6138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka void setPrevCodePoint(const int pointerId, const int c) { 6238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mPrevCodePoint[pointerId] = c; 6338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 6438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 6538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka void forwardInputIndex(const int pointerId, const int val) { 6638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka if (mInputIndex[pointerId] < 0) { 6738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mInputIndex[pointerId] = val; 6838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } else { 6938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka mInputIndex[pointerId] = mInputIndex[pointerId] + val; 7038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 7138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 7238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 7338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka int getInputIndex(const int pointerId) const { 7438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka // when "inputIndex" exceeds "inputSize", auto-completion needs to be done 7538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka return mInputIndex[pointerId]; 7638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 7738c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 7838c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka int getPrevCodePoint(const int pointerId) const { 7938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka return mPrevCodePoint[pointerId]; 8038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 8138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 8238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka float getTerminalDiffCost(const int pointerId) const { 8338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka return mTerminalDiffCost[pointerId]; 8438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka } 8538c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka 8638c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka private: 87632c9aca5bbae49be278cf3e88d12b364fbd6fc8Keisuke Kuroyanagi DISALLOW_COPY_AND_ASSIGN(DicNodeStateInput); 88632c9aca5bbae49be278cf3e88d12b364fbd6fc8Keisuke Kuroyanagi 8938c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka int mInputIndex[MAX_POINTER_COUNT_G]; 9038c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka int mPrevCodePoint[MAX_POINTER_COUNT_G]; 9138c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka float mTerminalDiffCost[MAX_POINTER_COUNT_G]; 9238c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka}; 9338c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka} // namespace latinime 9438c26dd0bf8cd5c4511e4a02d5eeae4b3553f03aSatoshi Kataoka#endif // LATINIME_DIC_NODE_STATE_INPUT_H 95