#pragma once #ifndef MESSMER_BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_ #define MESSMER_BLOBSTORE_IMPLEMENTATIONS_ONBLOCKS_BLOBONBLOCKS_H_ #include "../../interface/Blob.h" #include #include namespace blobstore { namespace onblocks { namespace datanodestore { class DataLeafNode; } namespace parallelaccessdatatreestore { class DataTreeRef; } class BlobOnBlocks: public Blob { public: BlobOnBlocks(cpputils::unique_ref datatree); virtual ~BlobOnBlocks(); const blockstore::Key &key() const override; uint64_t size() const override; void resize(uint64_t numBytes) override; cpputils::Data readAll() const override; void read(void *target, uint64_t offset, uint64_t size) const override; uint64_t tryRead(void *target, uint64_t offset, uint64_t size) const override; void write(const void *source, uint64_t offset, uint64_t size) override; void flush() override; cpputils::unique_ref releaseTree(); private: void _read(void *target, uint64_t offset, uint64_t count) const; void traverseLeaves(uint64_t offsetBytes, uint64_t sizeBytes, std::function) const; cpputils::unique_ref _datatree; mutable boost::optional _sizeCache; }; } } #endif