summaryrefslogtreecommitdiffstats
path: root/src/storage/chewing_large_table2.h
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-03-02 15:15:50 +0800
committerPeng Wu <alexepico@gmail.com>2016-03-02 15:15:50 +0800
commitb176ce01e4c7aaa67b16511ecf82e963e67e33df (patch)
treead4cb54774646ba913a4c4ae04736d16eecd1b1a /src/storage/chewing_large_table2.h
parentce724784daf9e2eb6608278bc6712ebedbfc5e66 (diff)
downloadlibpinyin-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.h25
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;