#pragma once #include "file_reader.hpp" #include "file_writer.hpp" #include "record.hpp" #include class MergeSorter { private: std::vector buffer_; const std::string &tmp_dir_; size_t buffer_rows_ = 0; size_t disk_reads_ = 0; size_t disk_writes_ = 0; size_t phases_ = 0; std::span get_chunk_span(size_t chunk_index); size_t create_initial_runs(const std::string &input_file, const std::string &next_dir); size_t merge_pass(const std::string ¤t_dir, const std::string &next_dir, size_t run_count); void perform_k_way_merge(std::vector> &readers, FileWriter &writer); public: MergeSorter(size_t buffer_rows, size_t buffer_cols, const std::string &tmp_dir); void sort_file(const std::string &input_file, const std::string &output_file); size_t disk_reads(); size_t disk_writes(); size_t phases(); };