CMUtil/inc/hgl/util/csv/CSVOutputStream.h

64 lines
2.3 KiB
C++

#pragma once
#include<hgl/util/csv/CSVOutput.h>
namespace hgl
{
namespace io
{
class OutputStream;
class TextOutputStream;
}//namespace io
namespace util
{
template<typename T> class CSVOutputStream
{
io::OutputStream *os;
io::TextOutputStream *tos;
CSVOutput<T> *csv;
public:
CSVOutputStream(io::OutputStream *_os,io::TextOutputStream *_tos,CSVOutput<T> *_csv)
{
os=_os;
tos=_tos;
csv=_csv;
}
~CSVOutputStream()
{
delete csv;
delete tos;
delete os;
}
void WriteString(const T *str,const int len){csv->WriteString(str,len);}
void WriteString(const String<T> &str){csv->WriteString(str);}
void WriteStringList(const StringList<T> &sl){return csv->WriteStringList(sl);}
void WriteStringList(const std::initializer_list<String<T>> &sl){return csv->WriteStringList(sl);}
void WriteStringList(const std::initializer_list<const T *> &sl){return csv->WriteStringList(sl);}
template<typename I>
void WriteInteger(const I &value){csv->WriteInteger(value);}
template<typename F>
void WriteFloat(const F &value,const uint frac){csv->WriteFloat(value,frac);}
};//template<typename T> class CSVOutputStream
template<typename T> inline CSVOutputStream<T> *CreateCSVOutputToStream(io::OutputStream *os,io::TextOutputStream *tos,const uint field_count,const T fields_terminated_char=T('\t'),const T enclosed_char=T('"'))
{
CSVOutput<T> *csv=new CSVOutput<T>(tos,field_count,fields_terminated_char,enclosed_char);
return(new CSVOutputStream<T>(os,tos,csv));
}
CSVOutputStream<u8char> *CreateCSVOutputToUTF8File(const OSString &filename,const uint field_count,const u8char fields_terminated_char=U8_TEXT('\t'),const u8char enclosed_char=U8_TEXT('"'));
CSVOutputStream<u16char> *CreateCSVOutputToUTF16LEFile(const OSString &filename,const uint field_count,const u16char fields_terminated_char=U16_TEXT('\t'),const u16char enclosed_char=U16_TEXT('"'));
}//namespace util
}//namespace hgl