From 5fee5e862ac5ce81573ef0845dea6618a3e6bd14 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Tue, 9 Dec 2014 17:56:48 +0100 Subject: [PATCH] BlobStoreOnBlocks mirrors BlockStore --- .../implementations/onblocks/BlobOnBlocks.cpp | 22 ++++++++++++++++++- .../implementations/onblocks/BlobOnBlocks.h | 19 ++++++++++++++-- .../onblocks/BlobStoreOnBlocks.cpp | 21 ++++++++++++++++-- .../onblocks/BlobStoreOnBlocks.h | 13 +++++++++-- src/blobstore/utils/BlobWithKey.h | 4 ++-- 5 files changed, 70 insertions(+), 9 deletions(-) diff --git a/src/blobstore/implementations/onblocks/BlobOnBlocks.cpp b/src/blobstore/implementations/onblocks/BlobOnBlocks.cpp index ee5f6ec3..33d5804c 100644 --- a/src/blobstore/implementations/onblocks/BlobOnBlocks.cpp +++ b/src/blobstore/implementations/onblocks/BlobOnBlocks.cpp @@ -1,14 +1,34 @@ #include +using std::unique_ptr; +using blockstore::Block; + namespace blobstore { namespace onblocks { -BlobOnBlocks::BlobOnBlocks() { +BlobOnBlocks::BlobOnBlocks(unique_ptr block) +: _block(std::move(block)) { } BlobOnBlocks::~BlobOnBlocks() { } +void *BlobOnBlocks::data() { + return const_cast(const_cast(this)->data()); +} + +const void *BlobOnBlocks::data() const { + return _block->data(); +} + +void BlobOnBlocks::flush() { + _block->flush(); +} + +size_t BlobOnBlocks::size() const { + return _block->size(); +} + } } diff --git a/src/blobstore/implementations/onblocks/BlobOnBlocks.h b/src/blobstore/implementations/onblocks/BlobOnBlocks.h index 3631e90f..088b8bbb 100644 --- a/src/blobstore/implementations/onblocks/BlobOnBlocks.h +++ b/src/blobstore/implementations/onblocks/BlobOnBlocks.h @@ -2,13 +2,28 @@ #ifndef BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_ #define BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_ +#include "blobstore/interface/Blob.h" +#include "blockstore/interface/Block.h" + +#include + namespace blobstore { namespace onblocks { -class BlobOnBlocks { +class BlobOnBlocks: public Blob { public: - BlobOnBlocks(); + BlobOnBlocks(std::unique_ptr block); virtual ~BlobOnBlocks(); + + void *data() override; + const void *data() const override; + + void flush() override; + + size_t size() const override; + +private: + std::unique_ptr _block; }; } diff --git a/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.cpp b/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.cpp index 49765f7e..70941049 100644 --- a/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.cpp +++ b/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.cpp @@ -1,13 +1,30 @@ -#include +#include "BlobStoreOnBlocks.h" + +#include "BlobOnBlocks.h" + +using std::unique_ptr; +using std::make_unique; + +using blockstore::BlockStore; namespace blobstore { namespace onblocks { -BlobStoreOnBlocks::BlobStoreOnBlocks() { +BlobStoreOnBlocks::BlobStoreOnBlocks(unique_ptr blockStore) +: _blocks(std::move(blockStore)) { } BlobStoreOnBlocks::~BlobStoreOnBlocks() { } +BlobWithKey BlobStoreOnBlocks::create(size_t size) { + auto block = _blocks->create(size); + return BlobWithKey(block.key, make_unique(std::move(block.block))); +} + +unique_ptr BlobStoreOnBlocks::load(const std::string &key) { + return make_unique(_blocks->load(key)); +} + } } diff --git a/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.h b/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.h index 3d46e739..802beaf6 100644 --- a/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.h +++ b/src/blobstore/implementations/onblocks/BlobStoreOnBlocks.h @@ -2,13 +2,22 @@ #ifndef BLOBSTORE_IMPLEMENTATIONS_BLOCKED_BLOBSTOREONBLOCKS_H_ #define BLOBSTORE_IMPLEMENTATIONS_BLOCKED_BLOBSTOREONBLOCKS_H_ +#include "blobstore/interface/BlobStore.h" +#include "blockstore/interface/BlockStore.h" + namespace blobstore { namespace onblocks { -class BlobStoreOnBlocks { +class BlobStoreOnBlocks: public BlobStore { public: - BlobStoreOnBlocks(); + BlobStoreOnBlocks(std::unique_ptr blockStore); virtual ~BlobStoreOnBlocks(); + + BlobWithKey create(size_t size) override; + std::unique_ptr load(const std::string &key) override; + +private: + std::unique_ptr _blocks; }; } diff --git a/src/blobstore/utils/BlobWithKey.h b/src/blobstore/utils/BlobWithKey.h index 2e576ad8..96868cff 100644 --- a/src/blobstore/utils/BlobWithKey.h +++ b/src/blobstore/utils/BlobWithKey.h @@ -9,10 +9,10 @@ namespace blobstore { struct BlobWithKey { - BlobWithKey(const std::string &key_, std::unique_ptr blob_): key(key_), blob(std::move(blob_)) {} + BlobWithKey(const std::string &key_, std::unique_ptr blob_): key(key_), blob(std::move(blob_)) {} std::string key; - std::unique_ptr blob; + std::unique_ptr blob; }; }