From b014b923a06a469b4f3e96640e2b4d375e5b6268 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Fri, 1 Jul 2016 11:58:48 +0800 Subject: update Kyoto Cabinet mask out methods --- src/storage/chewing_large_table2_kyotodb.cpp | 20 ++++---------------- src/storage/phrase_large_table3_kyotodb.cpp | 20 ++++---------------- 2 files changed, 8 insertions(+), 32 deletions(-) (limited to 'src') 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; } -- cgit