SpiecsEngine
 
Loading...
Searching...
No Matches
FreeList.h
Go to the documentation of this file.
1/**
2* @file FreeList.h.
3* @brief The free_list Class Definitions.
4* @author tcmalloc.
5*/
6
7#pragma once
8
9namespace scl {
10
11 /**
12 * @brief Free list for memory pool.
13 * @attention pushed object must large that 8B, for we want store a pointer in there.
14 */
16 {
17 public:
18
19 /**
20 * @brief Constructor Function.
21 */
23 : m_EndPointer(nullptr)
24 , m_Freelist(nullptr)
26 , m_Size(0)
27 {}
28
29 /**
30 * @brief Destructor Function.
31 */
32 virtual ~free_list() = default;
33
34 /**
35 * @brief Recycle a object memory to this free list.
36 * @param[in] obj pushed object.
37 */
38 void Push(void* obj);
39
40 /**
41 * @brief Pop a unused memory block from this free list.
42 * @return Returns unused memory block.
43 */
44 void* Pop();
45
46 /**
47 * @brief Determine if this list is empty.
48 * @return Returns true if is empty.
49 */
50 bool Empty() const { return m_Freelist == nullptr; }
51
52 /**
53 * @brief Get m_NBlocksAppliedFor reference.
54 */
55 const size_t ApplyforNBlocks() const { return m_NBlocksAppliedFor; }
56
57 /**
58 * @brief Increase count of blocks in next apply for.
59 */
60 void IncreaseInNextApplyFor() { m_NBlocksAppliedFor++; }
61
62 /**
63 * @brief Get this freelist spare size.
64 * @return Returns spare size.
65 */
66 const size_t Size() const { return m_Size; }
67
68 /**
69 * @brief Push other free list to this free list.
70 * @param[in] start other free list start pointer.
71 * @param[in] end other free list end pointer.
72 * @param[in] size other free list number.
73 */
74 void PushRange(void* start, void* end, size_t size);
75
76 /**
77 * @brief Pop unused memory blocks from this free list.
78 * @param[in,out] start objects start pointer.
79 * @param[in,out] end objects end pointer.
80 * @param[in] size objects number.
81 */
82 void PopRange(void*& start, void*& end, size_t size);
83
84 /**
85 * @brief Get current pointer.
86 * @return Returns current pointer.
87 */
88 const void* Begin() const { return m_Freelist; }
89
90 /**
91 * @brief Get current pointer (no const & reference version).
92 * @return Returns current pointer.
93 */
94 void*& Begin() { return m_Freelist; }
95
96 /**
97 * @brief Get end pointer (no const & reference version).
98 * @return Returns end pointer.
99 */
100 void*& End() { return m_EndPointer; }
101
102 private:
103
104 /**
105 * @brief end pointer;
106 */
108
109 /**
110 * @brief current pointer.
111 */
113
114 /**
115 * @brief count of blocks applied for in next time.
116 */
118
119 /**
120 * @brief freelist spare size.
121 */
123 };
124}
static void *& PointerSpace(void *obj)
Get object first 4/8 bytes as a pointer.
MemoryPool Class.
Definition MemoryPool.h:22
void PushRange(void *start, void *end, size_t size)
Push other free list to this free list.
Definition FreeList.cpp:57
size_t m_Size
freelist spare size.
Definition FreeList.h:122
void * m_Freelist
current pointer.
Definition FreeList.h:112
virtual ~free_list()=default
Destructor Function.
void * Pop()
Pop a unused memory block from this free list.
Definition FreeList.cpp:34
bool Empty() const
Determine if this list is empty.
Definition FreeList.h:50
free_list()
Constructor Function.
Definition FreeList.h:22
void PopRange(void *&start, void *&end, size_t size)
Pop unused memory blocks from this free list.
Definition FreeList.cpp:76
void Push(void *obj)
Recycle a object memory to this free list.
Definition FreeList.cpp:13
const void * Begin() const
Get current pointer.
Definition FreeList.h:88
void * m_EndPointer
end pointer;
Definition FreeList.h:107
const size_t ApplyforNBlocks() const
Get m_NBlocksAppliedFor reference.
Definition FreeList.h:55
size_t m_NBlocksAppliedFor
count of blocks applied for in next time.
Definition FreeList.h:117
void *& Begin()
Get current pointer (no const & reference version).
Definition FreeList.h:94
void IncreaseInNextApplyFor()
Increase count of blocks in next apply for.
Definition FreeList.h:60
void *& End()
Get end pointer (no const & reference version).
Definition FreeList.h:100
const size_t Size() const
Get this freelist spare size.
Definition FreeList.h:66
Free list for memory pool.
Definition FreeList.h:16