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

polymorph_reader.hpp « coding - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 0277a359c9117e697b0c742ce4f26602e78c4049 (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
33
34
35
36
37
38
39
40
41
#pragma once
#include "coding/reader.hpp"
#include "std/unique_ptr.hpp"

class PolymorphReader
{
public:
  // Takes ownership of pReader
  explicit PolymorphReader(Reader const * pReader = 0) : m_pReader(pReader)
  {
  }

  PolymorphReader(PolymorphReader const & reader)
    : m_pReader(reader.m_pReader->CreateSubReader(0, reader.m_pReader->Size()))
  {
  }

  PolymorphReader & operator = (PolymorphReader const & reader)
  {
    PolymorphReader(reader).m_pReader.swap(m_pReader);
    return *this;
  }

  inline uint64_t Size() const
  {
    return m_pReader->Size();
  }

  inline void Read(uint64_t pos, void * p, size_t size) const
  {
    m_pReader->Read(pos, p, size);
  }

  inline PolymorphReader SubReader(uint64_t pos, uint64_t size) const
  {
    return PolymorphReader(m_pReader->CreateSubReader(pos, size));
  }

private:
  unique_ptr<Reader const> m_pReader;
};