|
|
|
@ -42,7 +42,7 @@ public: |
|
|
|
m_free_head_index = -1; |
|
|
|
|
|
|
|
// Free all entries. |
|
|
|
for (s32 i = 0; i < static_cast<s32>(m_table_size); ++i) { |
|
|
|
for (s16 i = 0; i < static_cast<s16>(m_table_size); ++i) { |
|
|
|
m_objects[i] = nullptr; |
|
|
|
m_entry_infos[i].next_free_index = i - 1; |
|
|
|
m_free_head_index = i; |
|
|
|
@ -104,17 +104,8 @@ public: |
|
|
|
ResultCode Reserve(Handle* out_handle); |
|
|
|
void Unreserve(Handle handle); |
|
|
|
|
|
|
|
template <typename T> |
|
|
|
ResultCode Add(Handle* out_handle, T* obj) { |
|
|
|
static_assert(std::is_base_of_v<KAutoObject, T>); |
|
|
|
return this->Add(out_handle, obj, obj->GetTypeObj().GetClassToken()); |
|
|
|
} |
|
|
|
|
|
|
|
template <typename T> |
|
|
|
void Register(Handle handle, T* obj) { |
|
|
|
static_assert(std::is_base_of_v<KAutoObject, T>); |
|
|
|
return this->Register(handle, obj, obj->GetTypeObj().GetClassToken()); |
|
|
|
} |
|
|
|
ResultCode Add(Handle* out_handle, KAutoObject* obj); |
|
|
|
void Register(Handle handle, KAutoObject* obj); |
|
|
|
|
|
|
|
template <typename T> |
|
|
|
bool GetMultipleObjects(T** out, const Handle* handles, size_t num_handles) const { |
|
|
|
@ -160,9 +151,6 @@ public: |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
ResultCode Add(Handle* out_handle, KAutoObject* obj, u16 type); |
|
|
|
void Register(Handle handle, KAutoObject* obj, u16 type); |
|
|
|
|
|
|
|
s32 AllocateEntry() { |
|
|
|
ASSERT(m_count < m_table_size); |
|
|
|
|
|
|
|
@ -179,7 +167,7 @@ private: |
|
|
|
ASSERT(m_count > 0); |
|
|
|
|
|
|
|
m_objects[index] = nullptr; |
|
|
|
m_entry_infos[index].next_free_index = m_free_head_index; |
|
|
|
m_entry_infos[index].next_free_index = static_cast<s16>(m_free_head_index); |
|
|
|
|
|
|
|
m_free_head_index = index; |
|
|
|
|
|
|
|
@ -278,19 +266,13 @@ private: |
|
|
|
} |
|
|
|
|
|
|
|
union EntryInfo { |
|
|
|
struct { |
|
|
|
u16 linear_id; |
|
|
|
u16 type; |
|
|
|
} info; |
|
|
|
s32 next_free_index; |
|
|
|
u16 linear_id; |
|
|
|
s16 next_free_index; |
|
|
|
|
|
|
|
constexpr u16 GetLinearId() const { |
|
|
|
return info.linear_id; |
|
|
|
} |
|
|
|
constexpr u16 GetType() const { |
|
|
|
return info.type; |
|
|
|
return linear_id; |
|
|
|
} |
|
|
|
constexpr s32 GetNextFreeIndex() const { |
|
|
|
constexpr s16 GetNextFreeIndex() const { |
|
|
|
return next_free_index; |
|
|
|
} |
|
|
|
}; |
|
|
|
|