summaryrefslogtreecommitdiffstats
path: root/src/storage/phrase_large_table3.cpp
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-01-25 16:17:52 +0800
committerPeng Wu <alexepico@gmail.com>2016-01-25 16:17:52 +0800
commita1d8b3aff09476f0a4e2f9d39a91252a188e4af9 (patch)
tree6ba040e2e14ad101f2ed704eeb273942924a38dd /src/storage/phrase_large_table3.cpp
parent9235edee9e310c02f80d96710809dd0e8ee4ced5 (diff)
downloadlibpinyin-a1d8b3aff09476f0a4e2f9d39a91252a188e4af9.tar.gz
libpinyin-a1d8b3aff09476f0a4e2f9d39a91252a188e4af9.tar.xz
libpinyin-a1d8b3aff09476f0a4e2f9d39a91252a188e4af9.zip
write PhraseTableEntry::mask_out method
Diffstat (limited to 'src/storage/phrase_large_table3.cpp')
-rw-r--r--src/storage/phrase_large_table3.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/storage/phrase_large_table3.cpp b/src/storage/phrase_large_table3.cpp
index 6587b75..f89f166 100644
--- a/src/storage/phrase_large_table3.cpp
+++ b/src/storage/phrase_large_table3.cpp
@@ -122,6 +122,31 @@ int PhraseTableEntry::get_length() const {
return begin - end;
}
+/* mask out method */
+
+bool PhraseTableEntry::mask_out(phrase_token_t mask, phrase_token_t value) {
+ 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 * cur_token;
+ for (cur_token = begin; cur_token != end; ++cur_token) {
+ if ((*cur_token & mask) != value)
+ continue;
+
+ int offset = sizeof(table_entry_header_t) /* header */ +
+ (cur_token - begin) * sizeof(phrase_token_t);
+ m_chunk.remove_content(offset, sizeof(phrase_token_t));
+
+ /* update chunk end. */
+ end = (phrase_token_t *) m_chunk.end();
+ --cur_token;
+ }
+
+ return true;
+}
+
/* load text method */