diff options
author | Peng Wu <alexepico@gmail.com> | 2016-03-03 17:22:23 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2016-03-03 17:22:23 +0800 |
commit | 5dd5415a7d170a2cdb01e17480a5fec622afa747 (patch) | |
tree | 73bbf9e8e840b3afa157c443dfe1e3b623258645 /src/storage/kyotodb_utils.h | |
parent | ce72a2532ad39b0cfec46ca344c99f09bb151c55 (diff) | |
download | libpinyin-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.h | 25 |
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 |