diff options
author | Peng Wu <alexepico@gmail.com> | 2016-07-01 11:58:48 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2016-07-01 11:58:48 +0800 |
commit | b014b923a06a469b4f3e96640e2b4d375e5b6268 (patch) | |
tree | f9d82228c11ee062c83732b0f169b0efecbe49fa | |
parent | 6eb0940e07f4b718e6ef395d3239761af4f3ad71 (diff) | |
download | libpinyin-b014b923a06a469b4f3e96640e2b4d375e5b6268.tar.gz libpinyin-b014b923a06a469b4f3e96640e2b4d375e5b6268.tar.xz libpinyin-b014b923a06a469b4f3e96640e2b4d375e5b6268.zip |
update Kyoto Cabinet mask out methods
-rw-r--r-- | src/storage/chewing_large_table2_kyotodb.cpp | 20 | ||||
-rw-r--r-- | src/storage/phrase_large_table3_kyotodb.cpp | 20 |
2 files changed, 8 insertions, 32 deletions
diff --git a/src/storage/chewing_large_table2_kyotodb.cpp b/src/storage/chewing_large_table2_kyotodb.cpp index 2d2f6aa..62f65fd 100644 --- a/src/storage/chewing_large_table2_kyotodb.cpp +++ b/src/storage/chewing_large_table2_kyotodb.cpp @@ -379,8 +379,8 @@ public: vbuf = (char *) entry->m_chunk.begin(); \ vsiz = entry->m_chunk.size(); \ \ - assert(m_db->set(kbuf, ksiz, vbuf, vsiz)); \ - return NOP; \ + *sp = vsiz; \ + return vbuf; \ } switch(phrase_length) { @@ -411,27 +411,15 @@ public: } virtual const char* visit_empty(const char* kbuf, size_t ksiz, size_t* sp) { - m_db->set(kbuf, ksiz, empty_vbuf, 0); return NOP; } }; /* mask out method */ -/* assume it is in-memory dbm. */ bool ChewingLargeTable2::mask_out(phrase_token_t mask, phrase_token_t value) { - /* use copy and sweep algorithm here. */ - BasicDB * tmp_db = new ProtoTreeDB; - if (!tmp_db->open("-", BasicDB::OREADER|BasicDB::OWRITER|BasicDB::OCREATE)) - return false; - - MaskOutVisitor2 visitor(tmp_db, m_entries, mask, value); - m_db->iterate(&visitor, false); - - reset(); - - m_db = tmp_db; - init_entries(); + MaskOutVisitor2 visitor(m_db, m_entries, mask, value); + m_db->iterate(&visitor, true); return true; } diff --git a/src/storage/phrase_large_table3_kyotodb.cpp b/src/storage/phrase_large_table3_kyotodb.cpp index fa427dc..a02eac3 100644 --- a/src/storage/phrase_large_table3_kyotodb.cpp +++ b/src/storage/phrase_large_table3_kyotodb.cpp @@ -262,32 +262,20 @@ public: vbuf = (char *) m_entry.m_chunk.begin(); vsiz = m_entry.m_chunk.size(); - assert(m_db->set(kbuf, ksiz, vbuf, vsiz)); - return NOP; + *sp = vsiz; + return vbuf; } virtual const char* visit_empty(const char* kbuf, size_t ksiz, size_t* sp) { - m_db->set(kbuf, ksiz, empty_vbuf, 0); return NOP; } }; /* mask out method */ -/* assume it is in-memory dbm. */ bool PhraseLargeTable3::mask_out(phrase_token_t mask, phrase_token_t value) { - /* use copy and sweep algorithm here. */ - BasicDB * tmp_db = new ProtoTreeDB; - if (!tmp_db->open("-", BasicDB::OREADER|BasicDB::OWRITER|BasicDB::OCREATE)) - return false; - - MaskOutVisitor visitor(tmp_db, mask, value); - m_db->iterate(&visitor, false); - - reset(); - - m_db = tmp_db; - m_entry = new PhraseTableEntry; + MaskOutVisitor visitor(m_db, mask, value); + m_db->iterate(&visitor, true); return true; } |