summaryrefslogtreecommitdiffstats
path: root/src/storage/phrase_large_table3_bdb.cpp
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-02-04 11:29:17 +0800
committerPeng Wu <alexepico@gmail.com>2016-02-04 11:29:17 +0800
commitc74ba4bbf10f2913c2c775f6f54266ce9df151f1 (patch)
tree560ec276edff3ea2cb0acfc0da9bd0c61471918d /src/storage/phrase_large_table3_bdb.cpp
parentec0ca6fc051ceaad8c8db9b2f3345e34ac853632 (diff)
downloadlibpinyin-c74ba4bbf10f2913c2c775f6f54266ce9df151f1.tar.gz
libpinyin-c74ba4bbf10f2913c2c775f6f54266ce9df151f1.tar.xz
libpinyin-c74ba4bbf10f2913c2c775f6f54266ce9df151f1.zip
write remove_index method
Diffstat (limited to 'src/storage/phrase_large_table3_bdb.cpp')
-rw-r--r--src/storage/phrase_large_table3_bdb.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/storage/phrase_large_table3_bdb.cpp b/src/storage/phrase_large_table3_bdb.cpp
index fe27494..328aec6 100644
--- a/src/storage/phrase_large_table3_bdb.cpp
+++ b/src/storage/phrase_large_table3_bdb.cpp
@@ -278,4 +278,40 @@ int PhraseLargeTable3::add_index(int phrase_length,
return result;
}
+int PhraseLargeTable3::remove_index(int phrase_length,
+ /* in */ const ucs4_t phrase[],
+ /* in */ phrase_token_t token) {
+ assert(NULL != m_db);
+ assert(NULL != m_entry);
+
+ DBT db_key;
+ memset(&db_key, 0, sizeof(DBT));
+ db_key.data = (void *) phrase;
+ db_key.size = phrase_length * sizeof(ucs4_t);
+
+ DBT db_data;
+ memset(&db_data, 0, sizeof(DBT));
+ int ret = m_db->get(m_db, NULL, &db_key, &db_data, 0);
+ if (ret != 0)
+ return ERROR_REMOVE_ITEM_DONOT_EXISTS;
+
+ m_entry->m_chunk.set_chunk(db_data.data, db_data.size, NULL);
+
+ int result = m_entry->remove_index(token);
+ if (ERROR_OK != result)
+ return result;
+
+ /* removed the token. */
+ memset(&db_data, 0, sizeof(DBT));
+ db_data.data = m_entry->m_chunk.begin();
+ db_data.size = m_entry->m_chunk.size();
+
+ ret = m_db->put(m_db, NULL, &db_key, &db_data, 0);
+ if (ret != 0)
+ return ERROR_FILE_CORRUPTION;
+
+ return ERROR_OK;
+}
+
+
};