blob: 7f9d8d05e8c9444b922054b70388ed0ba6b5db1d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include "coding/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<uint8_t> 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;
}
}
}
|