WiscSort / EMS / header / data_manager.h
data_manager.h
Raw
#include <vector>
#include <string>
#include <map>
#include "record.h"

class DataManager
{
public:
   std::vector<int> file_ptr_;
   std::vector<uint64_t> file_size_;
   std::map<size_t, int> file_index_;

   int MMapFile(size_t file_size, int type, int fd, char *&mapped_buffer);
   DataManager(std::vector<std::string> &file_list);
   size_t RunRead(size_t block_num, size_t len, record_t *buffer);
   void OpenAndMapOutputFile(std::string output_file, size_t file_size);
   size_t RunWrite(record_t *write_buffer, off_t output_off);

   size_t MergeRead(record_t *read_buffer, size_t read_buf_rec_off,
                    char *run_file_map, size_t file_off,
                    size_t read_length);

   size_t MergeWrite(record_t *write_buffer, size_t write_len_recs);
   size_t MoveRemainingInputToOuputBuff();
   void LoadRecordToOutputBuffer(record_t *write_buffer,
                                 record_t *read_buffer,
                                 std::vector<in_record_t> &keys_idx,
                                 size_t key_off);
   // ~DataManager();

private:
   int output_fd_ = 0;
   size_t output_count_ = 0;

   char *input_mapped_buffer_ = NULL;
   char *output_mapped_buffer_ = NULL;

   size_t output_file_off_ = 0;
};