summaryrefslogtreecommitdiffstats
path: root/src/storage/kyotodb_utils.h
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-03-03 17:22:23 +0800
committerPeng Wu <alexepico@gmail.com>2016-03-03 17:22:23 +0800
commit5dd5415a7d170a2cdb01e17480a5fec622afa747 (patch)
tree73bbf9e8e840b3afa157c443dfe1e3b623258645 /src/storage/kyotodb_utils.h
parentce72a2532ad39b0cfec46ca344c99f09bb151c55 (diff)
downloadlibpinyin-5dd5415a7d170a2cdb01e17480a5fec622afa747.tar.gz
libpinyin-5dd5415a7d170a2cdb01e17480a5fec622afa747.tar.xz
libpinyin-5dd5415a7d170a2cdb01e17480a5fec622afa747.zip
write class CopyVisitor
Diffstat (limited to 'src/storage/kyotodb_utils.h')
-rw-r--r--src/storage/kyotodb_utils.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/storage/kyotodb_utils.h b/src/storage/kyotodb_utils.h
index 19ba82c..9b9de48 100644
--- a/src/storage/kyotodb_utils.h
+++ b/src/storage/kyotodb_utils.h
@@ -45,6 +45,31 @@ inline uint32_t attach_options(guint32 flags) {
return mode;
}
+/* Use DB::visitor. */
+
+/* Kyoto Cabinet requires non-NULL pointer for zero length value. */
+static const char * empty_vbuf = (char *)UINTPTR_MAX;
+
+class CopyVisitor : public DB::Visitor {
+private:
+ BasicDB * m_db;
+public:
+ CopyVisitor(BasicDB * db) {
+ m_db = db;
+ }
+
+ virtual const char* visit_full(const char* kbuf, size_t ksiz,
+ const char* vbuf, size_t vsiz, size_t* sp) {
+ m_db->set(kbuf, ksiz, vbuf, vsiz);
+ return NOP;
+ }
+
+ virtual const char* visit_empty(const char* kbuf, size_t ksiz, size_t* sp) {
+ m_db->set(kbuf, ksiz, empty_vbuf, 0);
+ return NOP;
+ }
+};
+
};
#endif