summaryrefslogtreecommitdiffstats
path: root/src/storage
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-07-01 11:58:48 +0800
committerPeng Wu <alexepico@gmail.com>2016-07-01 11:58:48 +0800
commitb014b923a06a469b4f3e96640e2b4d375e5b6268 (patch)
treef9d82228c11ee062c83732b0f169b0efecbe49fa /src/storage
parent6eb0940e07f4b718e6ef395d3239761af4f3ad71 (diff)
downloadlibpinyin-b014b923a06a469b4f3e96640e2b4d375e5b6268.tar.gz
libpinyin-b014b923a06a469b4f3e96640e2b4d375e5b6268.tar.xz
libpinyin-b014b923a06a469b4f3e96640e2b4d375e5b6268.zip
update Kyoto Cabinet mask out methods
Diffstat (limited to 'src/storage')
-rw-r--r--src/storage/chewing_large_table2_kyotodb.cpp20
-rw-r--r--src/storage/phrase_large_table3_kyotodb.cpp20
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;
}