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:
authorAlex Zolotarev <deathbaba@gmail.com>2010-12-05 19:24:16 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-22 22:33:57 +0300
commitd6e12b7ce4bcbf0ccd1c07eb25de143422913c34 (patch)
treea7e910c330ce4da9b4f2d8be76067adece2561c4 /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.hpp65
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"