fixes phrase_index.h
[platform/upstream/libpinyin.git] / src / storage / facade_phrase_table2.h
1 /* 
2  *  libpinyin
3  *  Library to deal with pinyin.
4  *  
5  *  Copyright (C) 2012 Peng Wu <alexepico@gmail.com>
6  *  
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  * 
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *  
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21
22 #ifndef FACADE_PHRASE_TABLE2_H
23 #define FACADE_PHRASE_TABLE2_H
24
25 #include "phrase_large_table2.h"
26
27 namespace pinyin{
28
29 /**
30  * FacadePhraseTable2:
31  *
32  * The facade class of phrase large table2.
33  *
34  */
35
36 class FacadePhraseTable2{
37 private:
38     PhraseLargeTable2 * m_system_phrase_table;
39     PhraseLargeTable2 * m_user_phrase_table;
40
41 public:
42     /**
43      * FacadePhraseTable2::FacadePhraseTable2:
44      *
45      * The constructor of the FacadePhraseTable2.
46      *
47      */
48     FacadePhraseTable2() {
49         m_system_phrase_table = NULL;
50         m_user_phrase_table = NULL;
51     }
52
53     /**
54      * FacadePhraseTable2::load:
55      * @system: the memory chunk of the system phrase table.
56      * @user: the memory chunk of the user phrase table.
57      * @returns: whether the load operation is successful.
58      *
59      * Load the system or user phrase table from the memory chunks.
60      *
61      */
62     bool load(MemoryChunk * system, MemoryChunk * user) {
63         bool result = false;
64         if (system) {
65             m_system_phrase_table = new PhraseLargeTable2;
66             result = m_system_phrase_table->load(system) || result;
67         }
68         if (user) {
69             m_user_phrase_table = new PhraseLargeTable2;
70             result = m_user_phrase_table->load(user) || result;
71         }
72         return result;
73     }
74
75     /**
76      * FacadePhraseTable2::store:
77      * @new_user: the memory chunk to store the user phrase table.
78      * @returns: whether the store operation is successful.
79      *
80      * Store the user phrase table to the memory chunk.
81      *
82      */
83     bool store(MemoryChunk * new_user) {
84         if (NULL == m_user_phrase_table)
85             return false;
86         return m_user_phrase_table->store(new_user);
87     }
88
89     /**
90      * FacadePhraseTable2::search:
91      * @phrase_length: the length of the phrase to be searched.
92      * @phrase: the ucs4 characters of the phrase to be searched.
93      * @tokens: the GArray of tokens to store the matched phrases.
94      * @returns: the search result of enum SearchResult.
95      *
96      * Search the phrase tokens according to the ucs4 characters.
97      *
98      */
99     int search(int phrase_length, /* in */ ucs4_t phrase[],
100                /* out */ PhraseTokens tokens) const {
101         /* clear tokens. */
102         for (size_t i = 0; i < PHRASE_INDEX_LIBRARY_COUNT; ++i) {
103             if (tokens[i])
104                 g_array_set_size(tokens[i], 0);
105         }
106
107         int result = SEARCH_NONE;
108
109         if (NULL != m_system_phrase_table)
110             result |= m_system_phrase_table->search
111                 (phrase_length, phrase, tokens);
112
113         if (NULL != m_user_phrase_table)
114             result |= m_user_phrase_table->search
115                 (phrase_length, phrase, tokens);
116
117         return result;
118     }
119
120     /**
121      * FacadePhraseTable2::add_index:
122      * @phrase_length: the length of the phrase to be added.
123      * @phrase: the ucs4 characters of the phrase to be added.
124      * @token: the token of the phrase to be added.
125      * @returns: the add result of enum ErrorResult.
126      *
127      * Add the phrase token to the user phrase table.
128      *
129      */
130     int add_index(int phrase_length, /* in */ ucs4_t phrase[],
131                   /* in */ phrase_token_t token) {
132         if (NULL == m_user_phrase_table)
133             return false;
134         return m_user_phrase_table->add_index
135             (phrase_length, phrase, token);
136     }
137
138     /**
139      * FacadePhraseTable2::remove_index:
140      * @phrase_length: the length of the phrase to be removed.
141      * @phrase: the ucs4 characters of the phrase to be removed.
142      * @token: the token of the phrase to be removed.
143      * @returns: the remove result of enum ErrorResult.
144      *
145      * Remove the phrase token from the user phrase table.
146      *
147      */
148     int remove_index(int phrase_length, /* in */ ucs4_t phrase[],
149                      /* in */ phrase_token_t token) {
150         if (NULL == m_user_phrase_table)
151             return false;
152         return m_user_phrase_table->remove_index
153             (phrase_length, phrase, token);
154     }
155 };
156
157 };
158
159
160 #endif