Skip to content

Commit 0f764c9

Browse files
committed
memory manage code refactor
1 parent d244f4e commit 0f764c9

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

Source/Library/MemoryManager.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ namespace sd
141141
while (rsp < top)
142142
{
143143
auto address = (void *)*reinterpret_cast<void **>(rsp);
144-
if (_objectRegister.contains(address))
144+
if (_objectRegister.isObjectRegistered(address))
145145
{
146146
result.emplace_back(address);
147147
}
@@ -159,7 +159,7 @@ namespace sd
159159
while (p < end)
160160
{
161161
auto address = (void *)*reinterpret_cast<void **>(p);
162-
if (_objectRegister.contains(address))
162+
if (_objectRegister.isObjectRegistered(address))
163163
{
164164
result.emplace_back(address);
165165
}

Source/Library/h/MemoryManager.hpp

+27-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <algorithm>
4+
#include <cstddef>
45
#include <unordered_map>
56

67
namespace sd
@@ -16,8 +17,8 @@ namespace sd
1617

1718
class MemoryManager : public IMemoryManager
1819
{
19-
private:
2020
#pragma region HelperClasses
21+
private:
2122
class Object
2223
{
2324
public:
@@ -61,6 +62,9 @@ namespace sd
6162
void unmark() { _marked = false; }
6263
bool isMarked() const { return _marked; }
6364
const TypeInfo *getTypeInfo() const { return _typeInfo; }
65+
66+
bool isValid() const { return !!getTypeInfo(); }
67+
operator bool() const { return isValid(); }
6468
};
6569

6670
private:
@@ -80,16 +84,29 @@ namespace sd
8084
};
8185

8286
void *getRawPtr() const { return _ptr; }
83-
Metadata &getMetadata() { return _metadata; }
84-
const Metadata &getMetadata() const { return _metadata; }
8587
const TypeInfo *getTypeInfo() const { return getMetadata().getTypeInfo(); }
8688

8789
size_t getSize() const { return getTypeInfo()->getSize(); }
8890
bool isMarked() const { return getMetadata().isMarked(); }
8991
void mark() { getMetadata().mark(); }
9092
void unmark() { getMetadata().unmark(); }
9193

92-
void destroy() { (*getTypeInfo()->getDeleter())(getRawPtr()); }
94+
bool isValid() const { return !!getRawPtr() && getMetadata(); }
95+
operator bool() const { return isValid(); }
96+
97+
void destroy()
98+
{
99+
if (isValid())
100+
{
101+
(*getTypeInfo()->getDeleter())(getRawPtr());
102+
}
103+
_ptr = nullptr;
104+
_metadata = Metadata{nullptr};
105+
}
106+
107+
private:
108+
Metadata &getMetadata() { return _metadata; }
109+
const Metadata &getMetadata() const { return _metadata; }
93110
};
94111

95112
class ObjectsRegister
@@ -98,14 +115,14 @@ namespace sd
98115
std::unordered_map<void *, Object> _objectsMap;
99116

100117
public:
101-
void registerNew(Object &&object) { _objectsMap.insert({object.getRawPtr(), std::move(object)}); }
102-
bool contains(void *objectPtr) const { return _objectsMap.contains(objectPtr); }
118+
void registerObject(Object &&object) { _objectsMap.insert({object.getRawPtr(), std::move(object)}); }
119+
bool isObjectRegistered(void *objectPtr) const { return _objectsMap.contains(objectPtr); }
103120
Object &getObject(void *objectPtr) { return _objectsMap.at(objectPtr); }
104121

105122
void clear() { _objectsMap.clear(); }
106123

107-
size_t numberOfRegisteredObjects() const { return _objectsMap.size(); }
108-
bool anyObjectRegistered() const { return _objectsMap.empty(); }
124+
size_t size() const { return _objectsMap.size(); }
125+
bool empty() const { return _objectsMap.empty(); }
109126

110127
template <class Fn> void unregisterIf(Fn func)
111128
{
@@ -117,7 +134,7 @@ namespace sd
117134
}
118135
};
119136
#pragma endregion
120-
137+
private:
121138
ObjectsRegister _objectRegister;
122139

123140
size_t _allocatedMemory = 0;
@@ -144,7 +161,7 @@ namespace sd
144161
auto object = Object::create<T>(std::forward<Args>(params)...);
145162
auto ptr = reinterpret_cast<T *>(object.getRawPtr());
146163
_allocatedMemory += object.getSize();
147-
_objectRegister.registerNew(std::move(object));
164+
_objectRegister.registerObject(std::move(object));
148165
if (isGBCollectionNeeded())
149166
{
150167
garbageCollect();

0 commit comments

Comments
 (0)