#pragma once #include "coding/reader.hpp" #include #include #include #include /// @TODO Add Windows support class MmapReader : public ModelReader { public: explicit MmapReader(std::string const & fileName); uint64_t Size() const override; void Read(uint64_t pos, void * p, size_t size) const override; std::unique_ptr CreateSubReader(uint64_t pos, uint64_t size) const override; /// Direct file/memory access uint8_t * Data() const; protected: // Used in special derived readers. void SetOffsetAndSize(uint64_t offset, uint64_t size); private: using base_type = ModelReader; class MmapData; MmapReader(MmapReader const & reader, uint64_t offset, uint64_t size); std::shared_ptr m_data; uint64_t m_offset; uint64_t m_size; };