This repository has been archived on 2025-03-22. You can view files and clone it, but cannot push or open issues or pull requests.
travelguide/env/writer.hpp
2013-08-07 22:51:21 +03:00

58 lines
865 B
C++

#pragma once
#include "file_handle.hpp"
namespace wr
{
class Writer
{
public:
virtual ~Writer() {}
virtual void Write(void const * p, size_t size) = 0;
template <typename T> void Write(T const & t)
{
Write(static_cast<void const *>(&t), sizeof(T));
}
void Write(string const & s)
{
size_t const count = s.size();
Write(static_cast<uint32_t>(count));
Write(s.c_str(), count);
}
void Write(bool b)
{
Write(static_cast<int8_t>(b ? 1 : 0));
}
};
class FileWriter : public Writer
{
typedef file::FileHandle HandleT;
HandleT m_file;
public:
FileWriter(string const & name)
: m_file(name, HandleT::WRITE_TRUNCATE)
{
}
using Writer::Write;
virtual void Write(void const * p, size_t size)
{
m_file.Write(p, size);
}
uint64_t Size()
{
m_file.Flush();
return m_file.Size();
}
};
}