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>2011-12-13 12:43:05 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:30:11 +0300
commita8faed31f84deb6c8215dd0a446433c2a4d485ca (patch)
tree5b81e308f01f32acd929c7a1f65ee7cfd8017641 /coding/reader_writer_ops.cpp
parenta43ef7fe5afa21d18333a78295511e0d59824a87 (diff)
Add rw_ops::Reverse.
Diffstat (limited to 'coding/reader_writer_ops.cpp')
-rw-r--r--coding/reader_writer_ops.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/coding/reader_writer_ops.cpp b/coding/reader_writer_ops.cpp
new file mode 100644
index 0000000000..93dff6e8f4
--- /dev/null
+++ b/coding/reader_writer_ops.cpp
@@ -0,0 +1,27 @@
+#include "reader_writer_ops.hpp"
+
+namespace rw_ops
+{
+ void Reverse(Reader const & src, Writer & dest)
+ {
+ // Read from end, reverse and write directly.
+
+ size_t const bufSz = 1024;
+ vector<char> buffer(bufSz);
+
+ uint64_t pos = src.Size();
+ while (pos > 0)
+ {
+ size_t const sz = pos > bufSz ? bufSz : pos;
+ ASSERT_GREATER_OR_EQUAL(pos, sz, ());
+
+ src.Read(pos - sz, &buffer[0], sz);
+
+ std::reverse(buffer.begin(), buffer.begin() + sz);
+
+ dest.Write(&buffer[0], sz);
+
+ pos -= sz;
+ }
+ }
+}