diff options
author | Alex Zolotarev <deathbaba@gmail.com> | 2010-12-05 19:24:16 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-22 22:33:57 +0300 |
commit | d6e12b7ce4bcbf0ccd1c07eb25de143422913c34 (patch) | |
tree | a7e910c330ce4da9b4f2d8be76067adece2561c4 /coding/write_to_sink.hpp |
One Month In Minsk. Made in Belarus.
Diffstat (limited to 'coding/write_to_sink.hpp')
-rw-r--r-- | coding/write_to_sink.hpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/coding/write_to_sink.hpp b/coding/write_to_sink.hpp new file mode 100644 index 0000000000..cf64f9d17f --- /dev/null +++ b/coding/write_to_sink.hpp @@ -0,0 +1,65 @@ +#pragma once +#include "endianness.hpp" +#include "../base/base.hpp" + +#include "../base/start_mem_debug.hpp" + +template <class TSink> void WriteToSink(TSink & sink, unsigned char c) +{ + sink.Write(&c, 1); +} + +template <class TSink> void WriteToSink(TSink & sink, signed char c) +{ + sink.Write(&c, 1); +} + +template <class TSink> void WriteToSink(TSink & sink, char c) +{ + sink.Write(&c, 1); +} + +template <class TSink> void WriteToSink(TSink & sink, uint16_t v) +{ + uint16_t t = SwapIfBigEndian(v); + sink.Write(&t, 2); +} + +template <class TSink> void WriteToSink(TSink & sink, int32_t v) +{ + int32_t t = SwapIfBigEndian(v); + sink.Write(&t, 4); +} + +template <class TSink> void WriteToSink(TSink & sink, uint32_t v) +{ + uint32_t t = SwapIfBigEndian(v); + sink.Write(&t, 4); +} + +template <class TSink> void WriteToSink(TSink & sink, int64_t v) +{ + int64_t t = SwapIfBigEndian(v); + sink.Write(&t, 8); +} + +template <class TSink> void WriteToSink(TSink & sink, uint64_t v) +{ + uint64_t t = SwapIfBigEndian(v); + sink.Write(&t, 8); +} + +template <typename SinkT> +struct WriterFunctor +{ + SinkT & m_Sink; + explicit WriterFunctor(SinkT & sink) : m_Sink(sink) {} + + template <typename T> + inline void operator() (T const & t) const + { + m_Sink.Write(&t, sizeof(T)); + } +}; + +#include "../base/stop_mem_debug.hpp" |