#pragma once #include namespace hgl { namespace io { class OutputStream; class TextOutputStream; }//namespace io namespace util { template class CSVOutputStream { io::OutputStream *os; io::TextOutputStream *tos; CSVOutput *csv; public: CSVOutputStream(io::OutputStream *_os,io::TextOutputStream *_tos,CSVOutput *_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 &str){csv->WriteString(str);} void WriteStringList(const StringList &sl){return csv->WriteStringList(sl);} void WriteStringList(const std::initializer_list> &sl){return csv->WriteStringList(sl);} void WriteStringList(const std::initializer_list &sl){return csv->WriteStringList(sl);} template void WriteInteger(const I &value){csv->WriteInteger(value);} template void WriteFloat(const F &value,const uint frac){csv->WriteFloat(value,frac);} };//template class CSVOutputStream template inline CSVOutputStream *CreateCSVOutputToStream(io::OutputStream *os,io::TextOutputStream *tos,const uint field_count,const T fields_terminated_char=T('\t'),const T enclosed_char=T('"')) { CSVOutput *csv=new CSVOutput(tos,field_count,fields_terminated_char,enclosed_char); return(new CSVOutputStream(os,tos,csv)); } CSVOutputStream *CreateCSVOutputToUTF8File(const OSString &filename,const uint field_count,const u8char fields_terminated_char=U8_TEXT('\t'),const u8char enclosed_char=U8_TEXT('"')); CSVOutputStream *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