diff options
author | Peng Wu <alexepico@gmail.com> | 2016-03-02 15:15:50 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2016-03-02 15:15:50 +0800 |
commit | b176ce01e4c7aaa67b16511ecf82e963e67e33df (patch) | |
tree | ad4cb54774646ba913a4c4ae04736d16eecd1b1a /src/storage/chewing_large_table2.h | |
parent | ce724784daf9e2eb6608278bc6712ebedbfc5e66 (diff) | |
download | libpinyin-b176ce01e4c7aaa67b16511ecf82e963e67e33df.tar.gz libpinyin-b176ce01e4c7aaa67b16511ecf82e963e67e33df.tar.xz libpinyin-b176ce01e4c7aaa67b16511ecf82e963e67e33df.zip |
write remove_index method
Diffstat (limited to 'src/storage/chewing_large_table2.h')
-rw-r--r-- | src/storage/chewing_large_table2.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/storage/chewing_large_table2.h b/src/storage/chewing_large_table2.h index 95cc41f..e9a64bd 100644 --- a/src/storage/chewing_large_table2.h +++ b/src/storage/chewing_large_table2.h @@ -146,7 +146,30 @@ public: } int remove_index(/* in */ const ChewingKey keys[], - /* in */ phrase_token_t token); + /* in */ phrase_token_t token) { + const IndexItem * begin = (IndexItem *) m_chunk.begin(); + const IndexItem * end = (IndexItem *) m_chunk.end(); + + const IndexItem remove_elem(keys, token); + + std_lite::pair<const IndexItem *, const IndexItem *> range = + std_lite::equal_range(begin, end, remove_elem, + phrase_exact_less_than2<phrase_length>); + + const IndexItem * cur_elem; + for (cur_elem = range.first; + cur_elem != range.second; ++cur_elem) { + if (cur_elem->m_token == token) + break; + } + + if (cur_elem == range.second) + return ERROR_REMOVE_ITEM_DONOT_EXISTS; + + int offset = (cur_elem - begin) * sizeof(IndexItem); + m_chunk.remove_content(offset, sizeof(IndexItem)); + return ERROR_OK; + } /* get length method */ int get_length() const; |