-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReservedBlock.h
49 lines (36 loc) · 1018 Bytes
/
ReservedBlock.h
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
#ifndef SRC_MEMORY_RESERVEDBLOCK_H_
#define SRC_MEMORY_RESERVEDBLOCK_H_
#include "AllocatedBlock.h"
#include "Allocator.h"
#include "MemoryBlock.h"
class DeviceHeap;
class ReservedBlock {
friend DeviceHeap;
public:
MemoryBlock GetMemoryBlock() const;
template <typename T>
T& GetMemoryObjectAs() const {
return *reinterpret_cast<T*>(memory_);
}
ReservedBlock();
~ReservedBlock();
ReservedBlock(ReservedBlock&) = delete;
ReservedBlock(ReservedBlock&& other) noexcept;
ReservedBlock& operator=(ReservedBlock&) = delete;
ReservedBlock& operator=(ReservedBlock&& other) noexcept;
private:
struct AllocationInfo {
u64 allocationIndex;
u64 allocationOffset;
u64 allocationSize;
u64 availableOffset;
u64 availableSize;
};
ReservedBlock(DeviceHeap* heap, Allocator::MemoryObject* memory,
AllocationInfo info);
private:
DeviceHeap* heap_;
Allocator::MemoryObject* memory_;
AllocationInfo info_;
};
#endif // SRC_MEMORY_RESERVEDBLOCK_H_