SpiecsEngine
 
Loading...
Searching...
No Matches
FreeList.cpp
Go to the documentation of this file.
1/**
2* @file FreeList.h.
3* @brief The free_list Class Implementation.
4* @author tcmalloc.
5*/
6
7#include "Pchheader.h"
8#include "FreeList.h"
9#include "Core/Memory/MemoryPool.h"
10
11namespace scl {
12
13 void free_list::Push(void* obj)
14 {
15 assert(obj);
16
17 /**
18 * @brief Insert to begin.
19 */
21 m_Freelist = obj;
22
23 /**
24 * @brief Recoring end pointer.
25 */
26 if (m_Size == 0)
27 {
28 m_EndPointer = obj;
29 }
30
31 ++m_Size;
32 }
33
34 void* free_list::Pop()
35 {
36 assert(m_Freelist);
37
38 /**
39 * @brief Pop from begin.
40 */
41 void* obj = m_Freelist;
43
44 --m_Size;
45
46 /**
47 * @brief Unrecoring end pointer.
48 */
49 if (m_Size == 0)
50 {
51 m_EndPointer = nullptr;
52 }
53
54 return obj;
55 }
56
57 void free_list::PushRange(void* start, void* end, size_t size)
58 {
59 /**
60 * @brief Insert to begin.
61 */
63 m_Freelist = start;
64
65 /**
66 * @brief Recoring end pointer.
67 */
68 if (m_Size == 0)
69 {
70 m_EndPointer = end;
71 }
72
73 m_Size += size;
74 }
75
76 void free_list::PopRange(void*& start, void*& end, size_t size)
77 {
78 assert(size <= m_Size);
79
80 start = end = m_Freelist;
81
82 /**
83 * @brief Pop from begin.
84 */
85 for (size_t i = 0; i < size - 1; ++i)
86 {
87 end = Spices::MemoryPool::PointerSpace(end);
88 }
89
92 m_Size -= size;
93
94 /**
95 * @brief Unrecoring end pointer.
96 */
97 if (m_Size == 0)
98 {
99 m_EndPointer = nullptr;
100 }
101 }
102}
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
void * m_Freelist
current pointer.
Definition FreeList.h:112
void * Pop()
Pop a unused memory block from this free list.
Definition FreeList.cpp:34
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
void * m_EndPointer
end pointer;
Definition FreeList.h:107
Free list for memory pool.
Definition FreeList.h:16