#ifndef IMAGEREADER_H #define IMAGEREADER_H class SectorSet; class ImageSpec; class ImageReaderProto; class DisassemblingGeometryMapper; class ImageReader { public: ImageReader(const ImageReaderProto& config); virtual ~ImageReader() {}; public: static std::unique_ptr create(const ImageReaderProto& config); static void updateConfigForFilename(ImageReaderProto* proto, const std::string& filename); public: static std::unique_ptr createDiskCopyImageReader(const ImageReaderProto& config); static std::unique_ptr createImgImageReader(const ImageReaderProto& config); static std::unique_ptr createJv3ImageReader(const ImageReaderProto& config); static std::unique_ptr createIMDImageReader(const ImageReaderProto& config); public: virtual Bytes getBlock(size_t offset, size_t length) const = 0; virtual const DisassemblingGeometryMapper* getGeometryMapper() const { return nullptr; } protected: const ImageReaderProto& _config; }; #endif