#pragma once #ifndef MESSMER_BLOCKSTORE_IMPLEMENTATIONS_PARALLELACCESS_BLOCKREF_H_ #define MESSMER_BLOCKSTORE_IMPLEMENTATIONS_PARALLELACCESS_BLOCKREF_H_ #include #include "../../interface/Block.h" #include "messmer/cpp-utils/macros.h" #include namespace blockstore { namespace parallelaccess { class ParallelAccessBlockStore; class BlockRef final: public Block, public parallelaccessstore::ParallelAccessStore::ResourceRefBase { public: //TODO Unneccessarily storing Key twice here (in parent class and in _baseBlock). explicit BlockRef(Block *baseBlock): Block(baseBlock->key()), _baseBlock(baseBlock) {} const void *data() const override { return _baseBlock->data(); } void write(const void *source, uint64_t offset, uint64_t size) override { return _baseBlock->write(source, offset, size); } void flush() override { return _baseBlock->flush(); } size_t size() const override { return _baseBlock->size(); } private: Block *_baseBlock; DISALLOW_COPY_AND_ASSIGN(BlockRef); }; } } #endif