dic_node_state_input.h revision 5a0381f7d00abf97f5792958420dbb8535977ab3
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef LATINIME_DIC_NODE_STATE_INPUT_H
18#define LATINIME_DIC_NODE_STATE_INPUT_H
19
20#include "defines.h"
21
22namespace latinime {
23
24// TODO: Have a .cpp for this class
25class DicNodeStateInput {
26 public:
27    DicNodeStateInput() {}
28    ~DicNodeStateInput() {}
29
30    void init() {
31        for (int i = 0; i < MAX_POINTER_COUNT_G; i++) {
32            // TODO: The initial value for mInputIndex should be -1?
33            //mInputIndex[i] = i == 0 ? 0 : -1;
34            mInputIndex[i] = 0;
35            mPrevCodePoint[i] = NOT_A_CODE_POINT;
36            mTerminalDiffCost[i] = static_cast<float>(MAX_VALUE_FOR_WEIGHTING);
37        }
38    }
39
40    void init(const DicNodeStateInput *const src, const bool resetTerminalDiffCost) {
41        for (int i = 0; i < MAX_POINTER_COUNT_G; i++) {
42             mInputIndex[i] = src->mInputIndex[i];
43             mPrevCodePoint[i] = src->mPrevCodePoint[i];
44             mTerminalDiffCost[i] = resetTerminalDiffCost ?
45                     static_cast<float>(MAX_VALUE_FOR_WEIGHTING) : src->mTerminalDiffCost[i];
46         }
47    }
48
49    void updateInputIndexG(const int pointerId, const int inputIndex,
50            const int prevCodePoint, const float terminalDiffCost, const float rawLength) {
51        mInputIndex[pointerId] = inputIndex;
52        mPrevCodePoint[pointerId] = prevCodePoint;
53        mTerminalDiffCost[pointerId] = terminalDiffCost;
54    }
55
56    void init(const DicNodeStateInput *const src) {
57        init(src, false);
58    }
59
60    // For transposition
61    void setPrevCodePoint(const int pointerId, const int c) {
62        mPrevCodePoint[pointerId] = c;
63    }
64
65    void forwardInputIndex(const int pointerId, const int val) {
66        if (mInputIndex[pointerId] < 0) {
67            mInputIndex[pointerId] = val;
68        } else {
69            mInputIndex[pointerId] = mInputIndex[pointerId] + val;
70        }
71    }
72
73    int getInputIndex(const int pointerId) const {
74        // when "inputIndex" exceeds "inputSize", auto-completion needs to be done
75        return mInputIndex[pointerId];
76    }
77
78    int getPrevCodePoint(const int pointerId) const {
79        return mPrevCodePoint[pointerId];
80    }
81
82    float getTerminalDiffCost(const int pointerId) const {
83        return mTerminalDiffCost[pointerId];
84    }
85
86 private:
87    DISALLOW_COPY_AND_ASSIGN(DicNodeStateInput);
88
89    int mInputIndex[MAX_POINTER_COUNT_G];
90    int mPrevCodePoint[MAX_POINTER_COUNT_G];
91    float mTerminalDiffCost[MAX_POINTER_COUNT_G];
92};
93} // namespace latinime
94#endif // LATINIME_DIC_NODE_STATE_INPUT_H
95