diff options
| author | Peng Wu <alexepico@gmail.com> | 2016-03-02 15:32:26 +0800 |
|---|---|---|
| committer | Peng Wu <alexepico@gmail.com> | 2016-03-02 15:32:26 +0800 |
| commit | 69546e6ce25ef8a93287370a07e48ed892f846e8 (patch) | |
| tree | d7f00cce4b3ecafd0b4e38183f96938c016ed0f3 /src | |
| parent | f3c74ca5eb43801efd396e030579a1b4d53decbc (diff) | |
| download | libpinyin-69546e6ce25ef8a93287370a07e48ed892f846e8.tar.gz libpinyin-69546e6ce25ef8a93287370a07e48ed892f846e8.tar.xz libpinyin-69546e6ce25ef8a93287370a07e48ed892f846e8.zip | |
write mask_out method
Diffstat (limited to 'src')
| -rw-r--r-- | src/storage/chewing_large_table2.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/storage/chewing_large_table2.h b/src/storage/chewing_large_table2.h index 9a20a2b..68821ed 100644 --- a/src/storage/chewing_large_table2.h +++ b/src/storage/chewing_large_table2.h @@ -180,7 +180,26 @@ public: } /* mask out method */ - bool mask_out(phrase_token_t mask, phrase_token_t value); + bool mask_out(phrase_token_t mask, phrase_token_t value) { + const IndexItem * begin = (IndexItem *) m_chunk.begin(); + const IndexItem * end = (IndexItem *) m_chunk.end(); + + const IndexItem * cur_elem; + for (cur_elem = begin; cur_elem != end; ++cur_elem) { + /* not match. */ + if ((cur_elem->m_token & mask) != value) + continue; + + int offset = (cur_elem - begin) * sizeof(IndexItem); + m_chunk.remove_content(offset, sizeof(IndexItem)); + + /* update chunk end. */ + end = (IndexItem *) m_chunk.end(); + --cur_elem; + } + + return true; + } }; |
