WiscSort / EMS / header / config.h
config.h
Raw
#pragma once
#include <string>
#include <vector>

#define GIB(x) (x * 1024 * 1024 * 1024ull)
#define GB(x) (x * 1000 * 1000 * 1000ull)

#define KEY_SIZE 10   // 10
#define VALUE_SIZE 90 // 94 // 246
#define RECORD_SIZE (KEY_SIZE + VALUE_SIZE)

/*
#define INDEX_SIZE 5
#define BLOCK_SIZE 4000          // Need not be equal to physical block size
#define READ_BUFFER_SIZE GB(10)  // RUNs are equal to READ buffer size
#define WRITE_BUFFER_SIZE GB(10) // WB can be < RB where multiple write cycles take place.
////////////////////////////////////////////////////////////////////
#define REC_PER_BLOCK (BLOCK_SIZE / RECORD_SIZE)
#define READ_BUFFER_COUNT (READ_BUFFER_SIZE / BLOCK_SIZE)
#define WRITE_BUFFER_COUNT (WRITE_BUFFER_SIZE / BLOCK_SIZE)
#define REC_PER_WRITE_BUFFER ((WRITE_BUFFER_COUNT * BLOCK_SIZE) / RECORD_SIZE)
#define REC_PER_READ_BUFFER ((READ_BUFFER_COUNT * BLOCK_SIZE) / RECORD_SIZE)
*/

struct Config
{
    std::vector<std::string> files;
    std::string output_dir;
    // int key_size;
    // int value_size;
    size_t read_buffer_size;
    size_t write_buffer_size;
    size_t block_size;
    int mode; // Three concurrency modes
    int read_thrds;
    int sort_thrds;
    int write_thrds;

    // Not from cmdline
    int record_size;
    size_t recs_per_blk;
    size_t read_buff_blk_count;
    size_t write_buff_blk_count;
    size_t read_buff_rec_count;
    size_t write_buff_rec_count;
};

// Initialize a global struct, perhaps replace this with a singleton?
extern struct Config conf;