#pragma once #ifndef MESSMER_BLOCKSTORE_IMPLEMENTATIONS_PARALLELACCESS_PARALLELACCESSBLOCKSTORE_H_ #define MESSMER_BLOCKSTORE_IMPLEMENTATIONS_PARALLELACCESS_PARALLELACCESSBLOCKSTORE_H_ #include #include "BlockRef.h" #include "../../interface/BlockStore.h" #include namespace blockstore { namespace parallelaccess { //TODO Check that this blockstore allows parallel destructing of blocks (otherwise we won't encrypt blocks in parallel) class ParallelAccessBlockStore final: public BlockStore { public: explicit ParallelAccessBlockStore(cpputils::unique_ref baseBlockStore); Key createKey() override; boost::optional> tryCreate(const Key &key, cpputils::Data data) override; boost::optional> load(const Key &key) override; void remove(cpputils::unique_ref block) override; uint64_t numBlocks() const override; private: cpputils::unique_ref _baseBlockStore; parallelaccessstore::ParallelAccessStore _parallelAccessStore; DISALLOW_COPY_AND_ASSIGN(ParallelAccessBlockStore); }; } } #endif