diff --git a/Include/Aurora/Memory/Heap.hpp b/Include/Aurora/Memory/Heap.hpp index 24c704b1..997fccd1 100644 --- a/Include/Aurora/Memory/Heap.hpp +++ b/Include/Aurora/Memory/Heap.hpp @@ -347,6 +347,20 @@ namespace Aurora::Memory return AuUPtr)>(nullptr, &Heap::RetardedSpecWrittenByRetards); } + template + cstatic AuUPtr)> CastPointer(AuUPtr)> &&pInPointer) + { + if (!pInPointer) + { + return NullUniquePointer(); + } + else + { + auto deleter = decltype(&Heap::DeleteThat)(pInPointer.get_deleter()); + return AuUPtr)>(AuStaticCast(pInPointer.release()), deleter); + } + } + template static AuSPtr ToSmartPointer(AuSPtr heap, T *pHead, diff --git a/Include/Aurora/RuntimeAliases.hpp b/Include/Aurora/RuntimeAliases.hpp index 592bb2d1..a8e3b2c7 100644 --- a/Include/Aurora/RuntimeAliases.hpp +++ b/Include/Aurora/RuntimeAliases.hpp @@ -154,4 +154,58 @@ template AuSPtr AuNewClass(Args &&...args) { return Aurora::Memory::GetDefaultDiscontiguousHeap()->NewClass(AuForward(args)...); +} + +template +AuHUPOf_t AuNewClassArrayUnique(Aurora::Memory::Heap *pHeap, AuUInt uElements, Args &&... fillCtr) +{ + return pHeap->NewClassArrayUnique(uElements, AuForward(fillCtr)...); +} + +template +AuSPtr AuNewClassArray(Aurora::Memory::Heap *pHeap, AuUInt uElements, Args &&... fillCtr) +{ + return pHeap->NewClassArray(uElements, AuForward(fillCtr)...); +} + +template +AuHUPOf_t AuNewClassUnique(Aurora::Memory::Heap *pHeap, Args &&...args) +{ + return pHeap->NewClassUnique(AuForward(args)...); +} + +template +AuSPtr AuNewClass(Aurora::Memory::Heap *pHeap, Args &&...args) +{ + return pHeap->NewClass(AuForward(args)...); +} + +template +AuHUPOf_t AuNewClassArrayUnique(const AuSPtr &pHeap, AuUInt uElements, Args &&... fillCtr) +{ + return pHeap->NewClassArrayUnique(uElements, AuForward(fillCtr)...); +} + +template +AuSPtr AuNewClassArray(const AuSPtr &pHeap, AuUInt uElements, Args &&... fillCtr) +{ + return pHeap->NewClassArray(uElements, AuForward(fillCtr)...); +} + +template +AuHUPOf_t AuNewClassUnique(const AuSPtr &pHeap, Args &&...args) +{ + return pHeap->NewClassUnique(AuForward(args)...); +} + +template +AuSPtr AuNewClass(const AuSPtr &pHeap, Args &&...args) +{ + return pHeap->NewClass(AuForward(args)...); +} + +template +AuHUPOf_t AuCastPointer(AuHUPOf_t &&pInPointer) +{ + return Aurora::Memory::Heap::CastPointer(AuMove(pInPointer)); } \ No newline at end of file