Skip to content

Commit

Permalink
Merge pull request #282 from dagurval/18-12-batchbatches
Browse files Browse the repository at this point in the history
Batch construct batches
  • Loading branch information
dgenr8 committed Dec 31, 2017
2 parents 79a378f + ce990fa commit 505e665
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions src/dbwrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
#include <leveldb/db.h>
#include <leveldb/write_batch.h>

static const size_t DBWRAPPER_PREALLOC_KEY_SIZE = 64;
static const size_t DBWRAPPER_PREALLOC_VALUE_SIZE = 1024;

class dbwrapper_error : public std::runtime_error
{
public:
Expand All @@ -40,32 +43,37 @@ class CDBBatch
private:
leveldb::WriteBatch batch;

CDataStream ssKey;
CDataStream ssValue;

public:
CDBBatch() : ssKey(SER_DISK, CLIENT_VERSION), ssValue(SER_DISK, CLIENT_VERSION) { };

template <typename K, typename V>
void Write(const K& key, const V& value)
{
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
ssKey.reserve(ssKey.GetSerializeSize(key));
ssKey.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
ssKey << key;
leveldb::Slice slKey(&ssKey[0], ssKey.size());

CDataStream ssValue(SER_DISK, CLIENT_VERSION);
ssValue.reserve(ssValue.GetSerializeSize(value));
ssValue.reserve(DBWRAPPER_PREALLOC_VALUE_SIZE);
ssValue << value;
leveldb::Slice slValue(&ssValue[0], ssValue.size());

batch.Put(slKey, slValue);
ssKey.clear();
ssValue.clear();
}

template <typename K>
void Erase(const K& key)
{
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
ssKey.reserve(ssKey.GetSerializeSize(key));
ssKey.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
ssKey << key;
leveldb::Slice slKey(&ssKey[0], ssKey.size());

batch.Delete(slKey);
ssKey.clear();
}
};

Expand All @@ -84,7 +92,7 @@ class CDBIterator

template<typename K> void Seek(const K& key) {
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
ssKey.reserve(ssKey.GetSerializeSize(key));
ssKey.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
ssKey << key;
leveldb::Slice slKey(&ssKey[0], ssKey.size());
piter->Seek(slKey);
Expand Down Expand Up @@ -161,7 +169,7 @@ class CDBWrapper
bool Read(const K& key, V& value) const
{
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
ssKey.reserve(ssKey.GetSerializeSize(key));
ssKey.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
ssKey << key;
leveldb::Slice slKey(&ssKey[0], ssKey.size());

Expand Down Expand Up @@ -194,7 +202,7 @@ class CDBWrapper
bool Exists(const K& key) const
{
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
ssKey.reserve(ssKey.GetSerializeSize(key));
ssKey.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
ssKey << key;
leveldb::Slice slKey(&ssKey[0], ssKey.size());

Expand Down

0 comments on commit 505e665

Please sign in to comment.