Welcome to mirror list, hosted at ThFree Co, Russian Federation.

reader_writer_ops.cpp « coding - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d13543e6df13d675adbe3066f5ac1b23e12cb1ff (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
28
29
30
31
32
#include "coding/reader_writer_ops.hpp"

#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <vector>

namespace rw_ops
{
void Reverse(Reader const & src, Writer & dest)
{
  // Read from end, reverse and write directly.

  size_t const bufSz = 1024;
  std::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;
  }
}
}  // namespace rw_ops