diff options
author | Peng Wu <alexepico@gmail.com> | 2016-01-25 14:08:00 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2016-01-25 14:09:13 +0800 |
commit | cbc65ce11de0b735aeba598357a5b25ad026de6e (patch) | |
tree | c1c5b66c5b2f02567026a95948945d60126b2ccf /src/storage/phrase_large_table3.cpp | |
parent | aaf6de3afa7f1289c1d5a6adb115bfe5ad232c93 (diff) | |
download | libpinyin-cbc65ce11de0b735aeba598357a5b25ad026de6e.tar.gz libpinyin-cbc65ce11de0b735aeba598357a5b25ad026de6e.tar.xz libpinyin-cbc65ce11de0b735aeba598357a5b25ad026de6e.zip |
write PhraseTableEntry::search method
Diffstat (limited to 'src/storage/phrase_large_table3.cpp')
-rw-r--r-- | src/storage/phrase_large_table3.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/storage/phrase_large_table3.cpp b/src/storage/phrase_large_table3.cpp index 1ab5c0a..2e1c188 100644 --- a/src/storage/phrase_large_table3.cpp +++ b/src/storage/phrase_large_table3.cpp @@ -24,6 +24,49 @@ namespace pinyin{ +table_entry_header_t PhraseTableEntry::get_header() const { + table_entry_header_t * head = (table_entry_header_t *) m_chunk.begin(); + return *head; +} + +void PhraseTableEntry::set_header(table_entry_header_t header) { + table_entry_header_t * head = (table_entry_header_t *) m_chunk.begin(); + *head = header; +} + +int PhraseTableEntry::search(/* out */ PhraseTokens tokens) const { + int result = SEARCH_NONE; + + const char * content = (char *) m_chunk.begin() + + sizeof(table_entry_header_t); + const phrase_token_t * begin = (phrase_token_t *) content; + const phrase_token_t * end = (phrase_token_t *) m_chunk.end(); + + const phrase_token_t * iter = NULL; + GArray * array = NULL; + + for (iter = begin; iter != end; ++iter) { + phrase_token_t token = *iter; + + /* filter out disabled sub phrase indices. */ + array = tokens[PHRASE_INDEX_LIBRARY_INDEX(token)]; + if (NULL == array) + continue; + + result |= SEARCH_OK; + + g_array_append_val(array, token); + } + + /* check SEARCH_CONTINUED flag in header */ + table_entry_header_t header = get_header(); + if (header & SEARCH_CONTINUED) + result |= SEARCH_CONTINUED; + + return result; +} + + /* load text method */ bool PhraseLargeTable3::load_text(FILE * infile){ |