#ifndef MESSMER_BLOCKSTORE_IMPLEMENTATIONS_PARALLELACCESS_PARALLELACCESSBLOCKSTOREADAPTER_H_
#define MESSMER_BLOCKSTORE_IMPLEMENTATIONS_PARALLELACCESS_PARALLELACCESSBLOCKSTOREADAPTER_H_

#include <messmer/cpp-utils/macros.h>
#include <messmer/parallelaccessstore/ParallelAccessStore.h>
#include "../../interface/BlockStore.h"

namespace blockstore {
namespace parallelaccess {

class ParallelAccessBlockStoreAdapter: public parallelaccessstore::ParallelAccessBaseStore<Block, Key> {
public:
  explicit ParallelAccessBlockStoreAdapter(BlockStore *baseBlockStore)
    :_baseBlockStore(std::move(baseBlockStore)) {
  }

  boost::optional<cpputils::unique_ref<Block>> loadFromBaseStore(const Key &key) override {
	return _baseBlockStore->load(key);
  }

  void removeFromBaseStore(cpputils::unique_ref<Block> block) override {
	return _baseBlockStore->remove(std::move(block));
  }

private:
  BlockStore *_baseBlockStore;

  DISALLOW_COPY_AND_ASSIGN(ParallelAccessBlockStoreAdapter);
};

}
}

#endif