blob: 0cf3c39794e83e9d7ea1fa4925cb00e4589fcea1 (
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
42
43
44
45
46
47
48
49
50
51
52
|
#pragma once
#include "coding/file_container.hpp"
#include "base/macros.hpp"
#include <cstdint>
#include <utility>
#include <vector>
class MemoryRegion
{
public:
virtual ~MemoryRegion() = default;
virtual uint64_t Size() const = 0;
virtual uint8_t const * ImmutableData() const = 0;
};
class MappedMemoryRegion : public MemoryRegion
{
public:
explicit MappedMemoryRegion(FilesMappingContainer::Handle && handle) : m_handle(std::move(handle))
{
}
// MemoryRegion overrides:
uint64_t Size() const override { return m_handle.GetSize(); }
uint8_t const * ImmutableData() const override { return m_handle.GetData<uint8_t>(); }
private:
FilesMappingContainer::Handle m_handle;
DISALLOW_COPY(MappedMemoryRegion);
};
class CopiedMemoryRegion : public MemoryRegion
{
public:
explicit CopiedMemoryRegion(std::vector<uint8_t> && buffer) : m_buffer(std::move(buffer)) {}
// MemoryRegion overrides:
uint64_t Size() const override { return m_buffer.size(); }
uint8_t const * ImmutableData() const override { return m_buffer.data(); }
uint8_t * MutableData() { return m_buffer.data(); }
private:
std::vector<uint8_t> m_buffer;
DISALLOW_COPY(CopiedMemoryRegion);
};
|