blob: 29b92d77597240e012dc73a8b40b3425386038f0 (
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
|
#pragma once
#include "coding/file_container.hpp"
#include "base/macros.hpp"
#include "std/cstdint.hpp"
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(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(vector<uint8_t> && buffer) : m_buffer(move(buffer)) {}
// MemoryRegion overrides:
uint64_t Size() const override { return m_buffer.size(); }
uint8_t const * ImmutableData() const override { return m_buffer.data(); }
inline uint8_t * MutableData() { return m_buffer.data(); }
private:
vector<uint8_t> m_buffer;
DISALLOW_COPY(CopiedMemoryRegion);
};
|