diff options
author | vng <viktor.govako@gmail.com> | 2014-08-29 16:50:21 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:25:48 +0300 |
commit | e226b0dd6fe9f89dc30d1cd488efbd0c71cc4a13 (patch) | |
tree | e1b2c500371e54d00aae86728b2ed1434fd2d9c3 /coding/write_to_sink.hpp | |
parent | 51a488a6bb0327f63653c1e02a913cff62dc779f (diff) |
Avoid code duplicating.
Diffstat (limited to 'coding/write_to_sink.hpp')
-rw-r--r-- | coding/write_to_sink.hpp | 60 |
1 files changed, 9 insertions, 51 deletions
diff --git a/coding/write_to_sink.hpp b/coding/write_to_sink.hpp index 48043b0b88..163a54cad8 100644 --- a/coding/write_to_sink.hpp +++ b/coding/write_to_sink.hpp @@ -2,55 +2,14 @@ #include "endianness.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, int16_t v) -{ - int16_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); -} +#include "../std/type_traits.hpp" -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) +template <class TSink, typename T> +typename enable_if<is_integral<T>, void>::type WriteToSink(TSink & sink, T const & v) { - uint64_t t = SwapIfBigEndian(v); - sink.Write(&t, 8); + T const t = SwapIfBigEndian(v); + sink.Write(&t, sizeof(T)); } template <class TSink> void WriteZeroesToSink(TSink & sink, uint64_t size) @@ -61,14 +20,13 @@ template <class TSink> void WriteZeroesToSink(TSink & sink, uint64_t size) sink.Write(zeroes, size & 255); } -template <typename SinkT> -struct WriterFunctor +template <typename SinkT> class WriterFunctor { SinkT & m_Sink; - explicit WriterFunctor(SinkT & sink) : m_Sink(sink) {} - template <typename T> - inline void operator() (T const & t) const +public: + explicit WriterFunctor(SinkT & sink) : m_Sink(sink) {} + template <typename T> void operator() (T const & t) const { m_Sink.Write(&t, sizeof(T)); } |