19 static void write_data(std::shared_ptr<writer> dat, std::ostream& wfile){
23 static void write_individual_dat(
const std::list<std::shared_ptr<writer>>& dats,
size_t ind, std::ostream& out_stream){
24 out_stream <<
"index: " << ind <<
"\n";
25 for(
auto& dat : dats){
30 static size_t write_dat(std::map<
size_t, std::list<std::shared_ptr<writer>>>& writers, FILE* ofile){
31 std::stringstream out_stream;
32 for(
auto& writes : writers){
35 const auto& o_str = out_stream.str();
36 fwrite(o_str.c_str(),
sizeof(char), o_str.size(), ofile);
45 std::condition_variable& write_notify,
data_io_info invals){
46 FILE* ofile = invals.
file;
48 volatile std::atomic_size_t* datas_in_queue = invals.
datas_queued;
49 volatile std::atomic_char* is_over = invals.
is_over;
52 std::unique_lock<std::mutex> data_lock(data);
54 while(writers->empty()){
62 std::unique_lock<std::mutex> lock(wait_m);
63 write_notify.wait(lock, [writers](){
return !writers->empty();});
69 if(*is_over == 1 && writers->empty()){
73 auto val_from_front = std::move(writers->front());