initial runs

This commit is contained in:
bronku 2025-11-17 08:26:23 +01:00
parent 9e9260c84d
commit 918c1cba78
18 changed files with 379 additions and 356 deletions

62
src/file_reader.cpp Normal file
View file

@ -0,0 +1,62 @@
#include "../include/file_reader.hpp"
void FileReader::refill_buffer()
{
current_pos_ = 0;
valid_items_ = 0;
for (size_t i = 0; i < buffer_.size(); ++i) {
Record record;
if (!(stream_ >> record)) {
break;
}
buffer_[i] = record;
valid_items_ = i + 1;
}
}
FileReader::FileReader(const std::string& filename, size_t buffer_size)
: stream_(filename)
, buffer_(buffer_size)
, current_pos_(0)
, valid_items_(0)
, total_reads_(0)
{
refill_buffer();
}
std::optional<Record> FileReader::read()
{
if (current_pos_ >= valid_items_) {
refill_buffer();
}
if (valid_items_ == 0) {
return std::nullopt;
}
Record record = buffer_[current_pos_];
current_pos_++;
total_reads_++;
return record;
}
size_t FileReader::read_chunk(std::span<Record>& chunk)
{
size_t count = 0;
for (size_t i = 0; i < chunk.size(); i++) {
auto record = read();
if (!record.has_value()) {
break;
}
chunk[count] = record.value();
count++;
}
return count;
}
size_t FileReader::total_reads() const
{
return total_reads_;
}