#pragma once #include "defs.hpp" #include #include #include template class SubFile { protected: FILE *fp = nullptr; public: SubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols); inline size_t bytes_per_frame() const { return sizeof(DataType) * rows * cols; } inline size_t pixels_per_frame() const { return rows * cols; } ssize_t rows{}; ssize_t cols{}; ssize_t n_frames{}; int sub_file_index_{}; size_t read_impl(std::byte *buffer){}; }; template class NormalSubFile : public SubFile { public: NormalSubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols); size_t read_impl(std::byte *buffer); }; // template // class FlipSubFile : public SubFile{ // size_t read_impl() override; // }; template class ReorderM03SubFile : public SubFile { public: ReorderM03SubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols); size_t read_impl(std::byte *buffer); }; using JungfrauSubFile = NormalSubFile; using Moench03SubFile = ReorderM03SubFile; using Mythen3SubFile = NormalSubFile; using SubFileVariants = std::variant;