data_store.h 1.71 KB
#ifndef DATA_STORE_H
#define DATA_STORE_H

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>

#include "../multithread/buffer_producer.h"
#include "data_basic.h"
#include "../constant.h"

namespace data{
	class Data_Store {
		protected:
			int size=0;
			bool write_on_add;
			std::string file_name;
			std::ofstream output;
			virtual void add_internal(data::Data_basic *data)=0;
		public:
			Data_Store():write_on_add(false){}
			Data_Store(std::string file_name):
				write_on_add(true),
				file_name(file_name)
			{
				this->output.open(this->file_name,std::ios::trunc);
			}

			virtual ~Data_Store(){
				this->output.close();
			}

			int getSize(){return this->size;}

			void add(data::Data_basic *data){
				this->add_internal(data);
				if(this->write_on_add){
					std::string tmp = data->to_csv();
					this->output << tmp << std::endl;
				}
			}
			virtual multithread::Buffer<data::Data_basic*>* get(std::string pattern)=0;
//			void write(std::string file_name, std::string pattern){
//				multithread::Buffer<data::Data_basic*> *buf;
//				std::string towrite;
//				std::ofstream output;
//				output.open(file_name, std::ios::out | std::ios::trunc);
//				buf = this->get(pattern);
//				int count_buf(0);
//				while(buf->available()){
//					if(!buf->isEmpty()){
//						data::Data_basic* tmp = buf->pop();
//						towrite += tmp->to_csv()+"\n";
//						count_buf ++;
//						delete tmp;
//					}else{
//						std::this_thread::sleep_for(THREAD_SLEEP);
//					}
//					if(count_buf == NB_ELT_BUF){
//						output << towrite;
//						towrite.clear();
//						count_buf=0;
//					}
//				}
//				if(count_buf>0){
//					output << towrite;
//				}
//				output.close();
//			}
	};
}
#endif // DATA_STORE_H