file_sorting/src/file_writer.cpp
2025-11-23 13:53:31 +01:00

49 lines
1,004 B
C++

#include "../include/file_writer.hpp"
void FileWriter::write_buffer()
{
for (size_t i = 0; i < current_pos_; i++) {
stream_ << buffer_[i] << "\n";
}
current_pos_ = 0;
}
FileWriter::FileWriter(const std::string& filename, size_t buffer_size)
: buffer_(buffer_size)
, current_pos_(0)
, total_writes_(0)
{
std::filesystem::path file_path(filename);
std::filesystem::path dir_path = file_path.parent_path();
if (dir_path != "") {
std::filesystem::create_directories(dir_path);
}
stream_.open(filename);
}
FileWriter::~FileWriter()
{
write_buffer();
}
void FileWriter::write(Record record)
{
if (current_pos_ >= buffer_.size()) {
write_buffer();
}
buffer_[current_pos_] = record;
current_pos_++;
total_writes_++;
}
void FileWriter::write_chunk(std::span<Record> chunk)
{
for (const auto& record : chunk) {
write(record);
}
}
size_t FileWriter::total_writes() const
{
return total_writes_;
}