BlobStoreOnBlocks mirrors BlockStore

This commit is contained in:
Sebastian Messmer 2014-12-09 17:56:48 +01:00
parent 532431f8e3
commit 5fee5e862a
5 changed files with 70 additions and 9 deletions

View File

@ -1,14 +1,34 @@
#include <blobstore/implementations/onblocks/BlobOnBlocks.h> #include <blobstore/implementations/onblocks/BlobOnBlocks.h>
using std::unique_ptr;
using blockstore::Block;
namespace blobstore { namespace blobstore {
namespace onblocks { namespace onblocks {
BlobOnBlocks::BlobOnBlocks() { BlobOnBlocks::BlobOnBlocks(unique_ptr<Block> block)
: _block(std::move(block)) {
} }
BlobOnBlocks::~BlobOnBlocks() { BlobOnBlocks::~BlobOnBlocks() {
} }
void *BlobOnBlocks::data() {
return const_cast<void*>(const_cast<const BlobOnBlocks*>(this)->data());
}
const void *BlobOnBlocks::data() const {
return _block->data();
}
void BlobOnBlocks::flush() {
_block->flush();
}
size_t BlobOnBlocks::size() const {
return _block->size();
}
} }
} }

View File

@ -2,13 +2,28 @@
#ifndef BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_ #ifndef BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_
#define BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_ #define BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_
#include "blobstore/interface/Blob.h"
#include "blockstore/interface/Block.h"
#include <memory>
namespace blobstore { namespace blobstore {
namespace onblocks { namespace onblocks {
class BlobOnBlocks { class BlobOnBlocks: public Blob {
public: public:
BlobOnBlocks(); BlobOnBlocks(std::unique_ptr<blockstore::Block> block);
virtual ~BlobOnBlocks(); virtual ~BlobOnBlocks();
void *data() override;
const void *data() const override;
void flush() override;
size_t size() const override;
private:
std::unique_ptr<blockstore::Block> _block;
}; };
} }

View File

@ -1,13 +1,30 @@
#include <blobstore/implementations/onblocks/BlobStoreOnBlocks.h> #include "BlobStoreOnBlocks.h"
#include "BlobOnBlocks.h"
using std::unique_ptr;
using std::make_unique;
using blockstore::BlockStore;
namespace blobstore { namespace blobstore {
namespace onblocks { namespace onblocks {
BlobStoreOnBlocks::BlobStoreOnBlocks() { BlobStoreOnBlocks::BlobStoreOnBlocks(unique_ptr<BlockStore> blockStore)
: _blocks(std::move(blockStore)) {
} }
BlobStoreOnBlocks::~BlobStoreOnBlocks() { BlobStoreOnBlocks::~BlobStoreOnBlocks() {
} }
BlobWithKey BlobStoreOnBlocks::create(size_t size) {
auto block = _blocks->create(size);
return BlobWithKey(block.key, make_unique<BlobOnBlocks>(std::move(block.block)));
}
unique_ptr<Blob> BlobStoreOnBlocks::load(const std::string &key) {
return make_unique<BlobOnBlocks>(_blocks->load(key));
}
} }
} }

View File

@ -2,13 +2,22 @@
#ifndef BLOBSTORE_IMPLEMENTATIONS_BLOCKED_BLOBSTOREONBLOCKS_H_ #ifndef BLOBSTORE_IMPLEMENTATIONS_BLOCKED_BLOBSTOREONBLOCKS_H_
#define BLOBSTORE_IMPLEMENTATIONS_BLOCKED_BLOBSTOREONBLOCKS_H_ #define BLOBSTORE_IMPLEMENTATIONS_BLOCKED_BLOBSTOREONBLOCKS_H_
#include "blobstore/interface/BlobStore.h"
#include "blockstore/interface/BlockStore.h"
namespace blobstore { namespace blobstore {
namespace onblocks { namespace onblocks {
class BlobStoreOnBlocks { class BlobStoreOnBlocks: public BlobStore {
public: public:
BlobStoreOnBlocks(); BlobStoreOnBlocks(std::unique_ptr<blockstore::BlockStore> blockStore);
virtual ~BlobStoreOnBlocks(); virtual ~BlobStoreOnBlocks();
BlobWithKey create(size_t size) override;
std::unique_ptr<Blob> load(const std::string &key) override;
private:
std::unique_ptr<blockstore::BlockStore> _blocks;
}; };
} }

View File

@ -9,10 +9,10 @@
namespace blobstore { namespace blobstore {
struct BlobWithKey { struct BlobWithKey {
BlobWithKey(const std::string &key_, std::unique_ptr<Blocb> blob_): key(key_), blob(std::move(blob_)) {} BlobWithKey(const std::string &key_, std::unique_ptr<Blob> blob_): key(key_), blob(std::move(blob_)) {}
std::string key; std::string key;
std::unique_ptr<Block> blob; std::unique_ptr<Blob> blob;
}; };
} }