summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-03-02 15:32:26 +0800
committerPeng Wu <alexepico@gmail.com>2016-03-02 15:32:26 +0800
commit69546e6ce25ef8a93287370a07e48ed892f846e8 (patch)
treed7f00cce4b3ecafd0b4e38183f96938c016ed0f3 /src
parentf3c74ca5eb43801efd396e030579a1b4d53decbc (diff)
downloadlibpinyin-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.h21
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;
+ }
};