summaryrefslogtreecommitdiffstats
path: root/src/storage
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-01-25 15:21:29 +0800
committerPeng Wu <alexepico@gmail.com>2016-01-25 15:21:29 +0800
commit9235edee9e310c02f80d96710809dd0e8ee4ced5 (patch)
tree76cdc5a7eabf0ff609c47e4e0525c18eaddba002 /src/storage
parentfa4854d1ef818aec6457698f2cf503147c039dbd (diff)
downloadlibpinyin-9235edee9e310c02f80d96710809dd0e8ee4ced5.tar.gz
libpinyin-9235edee9e310c02f80d96710809dd0e8ee4ced5.tar.xz
libpinyin-9235edee9e310c02f80d96710809dd0e8ee4ced5.zip
write PhraseTableEntry::remove_index method
Diffstat (limited to 'src/storage')
-rw-r--r--src/storage/phrase_large_table3.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/storage/phrase_large_table3.cpp b/src/storage/phrase_large_table3.cpp
index 27b8706..6587b75 100644
--- a/src/storage/phrase_large_table3.cpp
+++ b/src/storage/phrase_large_table3.cpp
@@ -69,6 +69,7 @@ int PhraseTableEntry::search(/* out */ PhraseTokens tokens) const {
}
/* add_index/remove_index method */
+
int PhraseTableEntry::add_index(/* in */ phrase_token_t token) {
const char * content = (char *) m_chunk.begin() +
sizeof(table_entry_header_t);
@@ -89,9 +90,29 @@ int PhraseTableEntry::add_index(/* in */ phrase_token_t token) {
return ERROR_OK;
}
+int PhraseTableEntry::remove_index(/* in */ phrase_token_t token) {
+ 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 == token)
+ break;
+ }
+
+ if (cur_token == end)
+ return ERROR_REMOVE_ITEM_DONOT_EXISTS;
+
+ int offset = sizeof(table_entry_header_t) /* header */ +
+ (cur_token - begin) * sizeof(phrase_token_t);
+ m_chunk.remove_content(offset, sizeof(phrase_token_t));
+ return ERROR_OK;
+}
/* get length method */
+
int PhraseTableEntry::get_length() const {
const char * content = (char *) m_chunk.begin() +
sizeof(table_entry_header_t);