[*] fuck the brain diseased demented boomers on the c++ arse sniffing committee
This commit is contained in:
parent
62b6fa20f8
commit
b7a5bfe8b3
@ -48,14 +48,22 @@ namespace Aurora::Memory
|
|||||||
pHeap(pHeap)
|
pHeap(pHeap)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
AU_COPY_MOVE_DEF(CppHeapWrapper)
|
|
||||||
|
|
||||||
std::shared_ptr<Heap> pHeap;
|
inline CppHeapWrapper(CppHeapWrapper *pFuckCppRetardsFixYourWorthlessSpec) :
|
||||||
|
pFuckCppRetardsFixYourWorthlessSpec(pFuckCppRetardsFixYourWorthlessSpec)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
inline CppHeapWrapper(const CppHeapWrapper &fuckCpp) :
|
||||||
|
pFuckCppRetardsFixYourWorthlessSpec((CppHeapWrapper *)&fuckCpp)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
AU_MOVE(CppHeapWrapper)
|
||||||
|
AU_DEF(CppHeapWrapper)
|
||||||
|
|
||||||
constexpr void deallocate(const T *pType,
|
constexpr void deallocate(const T *pType,
|
||||||
const size_t count)
|
const size_t count)
|
||||||
{
|
{
|
||||||
this->pHeap->Free((T *)pType);
|
this->GetHeap()->Free((T *)pType);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr AU_ALLOC T *allocate(const size_t count)
|
constexpr AU_ALLOC T *allocate(const size_t count)
|
||||||
@ -65,7 +73,7 @@ namespace Aurora::Memory
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pData = this->pHeap->FAlloc(count, alignof(T));
|
auto pData = this->GetHeap()->FAlloc(count * sizeof(T), alignof(T));
|
||||||
if (!pData)
|
if (!pData)
|
||||||
{
|
{
|
||||||
throw std::bad_alloc();
|
throw std::bad_alloc();
|
||||||
@ -73,12 +81,58 @@ namespace Aurora::Memory
|
|||||||
return (T *)pData;
|
return (T *)pData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class U, class... Args >
|
||||||
|
void construct(U *p, Args&&... args)
|
||||||
|
{
|
||||||
|
if constexpr (AuIsClass_v<T>)
|
||||||
|
{
|
||||||
|
new ((void *)p) T(AuForward<Args &&>(args)...);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class U, class... Args >
|
||||||
|
void construct_at(U *p, Args&&... args)
|
||||||
|
{
|
||||||
|
if constexpr (AuIsClass_v<T>)
|
||||||
|
{
|
||||||
|
new ((void *)p) T(AuForward<Args &&>(args)...);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(AU_LANG_CPP_23)
|
#if defined(AU_LANG_CPP_23)
|
||||||
constexpr std::allocation_result<T *> allocate_at_least(const size_t count)
|
constexpr std::allocation_result<T *> allocate_at_least(const size_t count)
|
||||||
{
|
{
|
||||||
auto pThat = this->allocate(count);
|
auto pThat = this->allocate(count);
|
||||||
return { pThat, this->pHeap->GetChunkSize(pThat) };
|
return { (T *)pThat, this->GetHeap()->GetChunkSize(pThat) / sizeof(T) };
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
std::shared_ptr<Heap> &GetHeap()
|
||||||
|
{
|
||||||
|
if (this->pFuckCppRetardsFixYourWorthlessSpec)
|
||||||
|
{
|
||||||
|
return this->pFuckCppRetardsFixYourWorthlessSpec->GetHeap();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return this->pHeap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetHeap(std::shared_ptr<Heap> pHeap)
|
||||||
|
{
|
||||||
|
if (this->pFuckCppRetardsFixYourWorthlessSpec)
|
||||||
|
{
|
||||||
|
this->pFuckCppRetardsFixYourWorthlessSpec->SetHeap(pHeap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->pHeap = pHeap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::shared_ptr<Heap> pHeap;
|
||||||
|
CppHeapWrapper *pFuckCppRetardsFixYourWorthlessSpec {};
|
||||||
};
|
};
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user