add contextManager to hanldle files

This commit is contained in:
Bechir Braham
2024-03-22 15:02:15 +01:00
parent e7bf408a21
commit d0151153fb
17 changed files with 105 additions and 81 deletions

View File

@ -1,6 +1,6 @@
#include "aare/JsonFile.hpp"
Frame *JsonFile::get_frame(size_t frame_number) {
Frame JsonFile::get_frame(size_t frame_number) {
if (frame_number > this->total_frames) {
throw std::runtime_error("Frame number out of range");
}
@ -9,7 +9,7 @@ Frame *JsonFile::get_frame(size_t frame_number) {
size_t frame_size = this->subfiles[subfile_id]->bytes_per_frame();
buffer = new std::byte[frame_size];
this->subfiles[subfile_id]->get_frame(buffer, frame_number % this->max_frames_per_file);
auto f = new Frame(buffer, this->rows, this->cols, this->bitdepth );
auto f = Frame(buffer, this->rows, this->cols, this->bitdepth );
delete[] buffer;

View File

@ -49,8 +49,8 @@ void JsonFileFactory::open_subfiles(File*_file) {
}
}
File* JsonFileFactory::load_file() {
JsonFile *file = new JsonFile();
JsonFile* JsonFileFactory::load_file() {
JsonFile* file = new JsonFile();
file->fname = this->m_fpath;
this->parse_fname(file);
this->parse_metadata(file);

View File

@ -6,16 +6,16 @@ NumpyFile::NumpyFile(std::filesystem::path fname_){
fp = fopen(this->fname.c_str(), "rb");
}
Frame* NumpyFile::get_frame(size_t frame_number) {
Frame NumpyFile::get_frame(size_t frame_number) {
if (fp == nullptr) {
throw std::runtime_error("File not open");
}
if (frame_number > header.shape[0]) {
throw std::runtime_error("Frame number out of range");
}
Frame *frame = new Frame(header.shape[1], header.shape[2], header.dtype.itemsize*8);
Frame frame = Frame(header.shape[1], header.shape[2], header.dtype.itemsize*8);
fseek(fp, header_size + frame_number * bytes_per_frame(), SEEK_SET);
fread(frame->_get_data(), bytes_per_frame(), 1, fp);
fread(frame._get_data(), bytes_per_frame(), 1, fp);
return frame;
}

View File

@ -72,8 +72,8 @@ void NumpyFileFactory::parse_metadata(File *_file) {
file->header = {dtype, fortran_order, shape};
}
File* NumpyFileFactory::load_file() {
NumpyFile *file = new NumpyFile(this->m_fpath);
NumpyFile* NumpyFileFactory::load_file() {
NumpyFile* file = new NumpyFile(this->m_fpath);
parse_metadata(file);
std::cout << "parsed header: " << file->header.to_string() << std::endl;
return file;