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:
-rw-r--r--coding/read_write_utils.hpp17
-rw-r--r--coding/reader.hpp7
2 files changed, 23 insertions, 1 deletions
diff --git a/coding/read_write_utils.hpp b/coding/read_write_utils.hpp
index b7bf10a14a..580990aa9d 100644
--- a/coding/read_write_utils.hpp
+++ b/coding/read_write_utils.hpp
@@ -114,4 +114,21 @@ namespace rw
if (count > 0)
sink.Write(&v[0], count * sizeof(ValueT));
}
+
+ template <class ReaderT, class WriterT>
+ void ReadAndWrite(ReaderT & reader, WriterT & writer, size_t bufferSize = 4*1024)
+ {
+ uint64_t size = reader.Size();
+ vector<char> buffer(min(bufferSize, static_cast<size_t>(size)));
+
+ while (size > 0)
+ {
+ size_t const curr = min(bufferSize, static_cast<size_t>(size));
+
+ reader.Read(&buffer[0], curr);
+ writer.Write(&buffer[0], curr);
+
+ size -= curr;
+ }
+ }
}
diff --git a/coding/reader.hpp b/coding/reader.hpp
index 9aa5d5fff8..e0605e541b 100644
--- a/coding/reader.hpp
+++ b/coding/reader.hpp
@@ -182,7 +182,7 @@ public:
{
if (m_pos + size > m_reader.Size())
{
- size_t remainingSize = static_cast<size_t>(m_reader.Size() - m_pos);
+ size_t const remainingSize = static_cast<size_t>(Size());
m_reader.Read(m_pos, p, remainingSize);
m_pos = m_reader.Size();
MYTHROW1(SourceOutOfBoundsException, remainingSize, ());
@@ -204,6 +204,11 @@ public:
return m_pos;
}
+ uint64_t Size() const
+ {
+ return (m_reader.Size() - m_pos);
+ }
+
ReaderT const & Reader() const
{
return m_reader;