Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions core/include/retroforge/io/BinaryFileReader.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include <cstdint>
#include <fstream>
#include <string>
#include <vector>

namespace retroforge ::io {

class BinaryFileReader {
public:
explicit BinaryFileReader(const std ::string &caminho);

std::vector<uint8_t> read_at(std ::streamoff offset, size_t quantidade);

std::vector<uint8_t> read_next_chunk(size_t tamanho_maximo);

bool eof() const;
std ::uintmax_t tamanho_total() const { return tamanho_total_; }

private:
std::ifstream arquivo_;
std::uintmax_t tamanho_total_;
};
} // namespace retroforge::io
1 change: 0 additions & 1 deletion core/src/dummy.cpp

This file was deleted.

43 changes: 43 additions & 0 deletions core/src/io/BinaryFileReader.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#include "retroforge/io/BinaryFileReader.hpp"

#include <filesystem>
#include <stdexcept>

namespace retroforge::io {

BinaryFileReader::BinaryFileReader(const std::string &caminho)
: arquivo_(caminho, std::ios::in | std::ios::binary), tamanho_total_(0) {

if (!arquivo_.is_open()) {
throw std::runtime_error(" Nao foi possivel abrir : " + caminho);
}

tamanho_total_ = std::filesystem::file_size(caminho);
}

std::vector<uint8_t> BinaryFileReader::read_at(std::streamoff offset, size_t quantidade) {
arquivo_.clear();
arquivo_.seekg(offset, std::ios::beg);

std::vector<uint8_t> buffer(quantidade);

arquivo_.read(reinterpret_cast<char *>(buffer.data()),
static_cast<std::streamsize>(quantidade));
buffer.resize(static_cast<size_t>(arquivo_.gcount()));

return buffer;
}

std::vector<uint8_t> BinaryFileReader::read_next_chunk(size_t tamanho_maximo) {
std::vector<uint8_t> buffer(tamanho_maximo);

arquivo_.read(reinterpret_cast<char *>(buffer.data()),
static_cast<std::streamsize>(tamanho_maximo));
buffer.resize(static_cast<size_t>(arquivo_.gcount()));

return buffer;
}

bool BinaryFileReader::eof() const { return arquivo_.eof(); }

} // namespace retroforge::io
Loading