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/byte_stream.hpp
One Month In Minsk. Made in Belarus.
Diffstat (limited to 'coding/byte_stream.hpp')
-rw-r--r--coding/byte_stream.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/coding/byte_stream.hpp b/coding/byte_stream.hpp
new file mode 100644
index 0000000000..e006ced5ef
--- /dev/null
+++ b/coding/byte_stream.hpp
@@ -0,0 +1,60 @@
+#pragma once
+#include "../base/base.hpp"
+#include "../std/vector.hpp"
+#include "../std/memcpy.hpp"
+#include "../base/start_mem_debug.hpp"
+
+class ArrayByteSource
+{
+public:
+ explicit ArrayByteSource(const void * p) : m_p(static_cast<const unsigned char *>(p)) {}
+
+ unsigned char ReadByte()
+ {
+ return *m_p++;
+ }
+
+ void Read(void * ptr, size_t size)
+ {
+ memcpy(ptr, m_p, size);
+ m_p += size;
+ }
+
+ const void * Ptr() const {
+ return m_p;
+ }
+
+ void Advance(size_t size)
+ {
+ m_p += size;
+ }
+private:
+ const unsigned char * m_p;
+};
+
+// TODO: Separate sink and rich write interface.
+template <class TStorage = vector<unsigned char> > class PushBackByteSink
+{
+public:
+ explicit PushBackByteSink(TStorage & storage)
+ : m_Storage(storage), m_InitialStorageSize(storage.size())
+ {
+ }
+
+ void Write(void const * p, size_t size)
+ {
+ m_Storage.insert(m_Storage.end(),
+ static_cast<unsigned char const *>(p),
+ static_cast<unsigned char const *>(p) + size);
+ }
+
+ size_t BytesWritten() const
+ {
+ return m_Storage.size() - m_InitialStorageSize;
+ }
+private:
+ TStorage & m_Storage;
+ size_t m_InitialStorageSize;
+};
+
+#include "../base/stop_mem_debug.hpp"