Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2014-08-29 16:50:21 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:25:48 +0300
commite226b0dd6fe9f89dc30d1cd488efbd0c71cc4a13 (patch)
treee1b2c500371e54d00aae86728b2ed1434fd2d9c3 /coding/write_to_sink.hpp
parent51a488a6bb0327f63653c1e02a913cff62dc779f (diff)
Avoid code duplicating.
Diffstat (limited to 'coding/write_to_sink.hpp')
-rw-r--r--coding/write_to_sink.hpp60
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));
}