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 | |
| parent | aaf6de3afa7f1289c1d5a6adb115bfe5ad232c93 (diff) | |
write PhraseTableEntry::search method
Diffstat (limited to 'src')
| -rw-r--r-- | src/storage/phrase_large_table3.cpp | 43 | ||||
| -rw-r--r-- | src/storage/phrase_large_table3.h | 2 |
2 files changed, 44 insertions, 1 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){ diff --git a/src/storage/phrase_large_table3.h b/src/storage/phrase_large_table3.h index 2a7d3fb..6481006 100644 --- a/src/storage/phrase_large_table3.h +++ b/src/storage/phrase_large_table3.h @@ -83,7 +83,7 @@ private: } protected: - table_entry_header_t get_header(); + table_entry_header_t get_header() const; void set_header(table_entry_header_t header); |
