#ifndef _ESM_WRITER_H #define _ESM_WRITER_H #include #include #include "esm_common.hpp" namespace ESM { class ESMWriter { public: void writeHNString(const std::string& name, const std::string& data); void writeHNOString(const std::string& name, const std::string& data) { if (!data.empty()) writeHNString(name, data); } template void writeHNT(const std::string& name, const T& data) { writeName(name); writeT(data); } template void writeHNT(const std::string& name, const T& data, int size) { assert(sizeof(T) == size); writeHNT(name, data); } template void writeHT(const T& data) { writeT((unsigned int)sizeof(T)); writeT(data); } template void writeHT(const T& data, int size) { assert(sizeof(T) == size); writeHT(data); } template void writeT(const T& data) { write((char*)&data, sizeof(T)); } template void writeT(const T& data, int size) { assert(sizeof(T) == size); writeT(data); } void writeHString(const std::string& data); void writeName(const std::string& data); void write(const char* data, int size); private: std::ostream m_stream; }; } #endif