mirror of https://github.com/zeldaret/tp.git
294 lines
8.2 KiB
C++
294 lines
8.2 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: std-vector
|
|
//
|
|
|
|
#include "JSystem/JGadget/std-vector.h"
|
|
#include "dolphin/types.h"
|
|
#include "algorithm.h"
|
|
|
|
//
|
|
// Types:
|
|
//
|
|
|
|
namespace JGadget {
|
|
struct vector {
|
|
/* 802DCCC8 */ static u32 extend_default(u32, u32, u32);
|
|
};
|
|
|
|
template <typename T>
|
|
struct TAllocator {
|
|
void destroy(T* item) {}
|
|
void deallocate(T* mem, u32 size) {
|
|
DeallocateRaw(mem);
|
|
}
|
|
void DeallocateRaw(T* mem) {
|
|
delete mem;
|
|
}
|
|
T* allocate(u32 count, void *param_2) {
|
|
return AllocateRaw(count * sizeof(T));
|
|
}
|
|
T* AllocateRaw(u32 size) {
|
|
return (T*)new char[size];
|
|
}
|
|
|
|
u8 field_0x0;
|
|
};
|
|
/* TAllocator<void*> */
|
|
struct TAllocator__template0 {};
|
|
|
|
typedef u32 (*extendFunc)(u32, u32, u32);
|
|
|
|
template <typename T, typename Allocator = JGadget::TAllocator<T> >
|
|
struct TVector {
|
|
struct TDestructed_deallocate_ {
|
|
TDestructed_deallocate_(Allocator* allocator, T* addr) {
|
|
mAllocator = allocator;
|
|
mAddr = addr;
|
|
}
|
|
void set(T* addr) {
|
|
mAddr = addr;
|
|
}
|
|
inline ~TDestructed_deallocate_() {
|
|
mAllocator->deallocate(mAddr, 0);
|
|
}
|
|
Allocator* mAllocator;
|
|
T* mAddr;
|
|
};
|
|
|
|
TVector(Allocator const& param_0) {
|
|
field_0x0 = param_0;
|
|
pBegin_ = NULL;
|
|
pEnd_ = pBegin_;
|
|
mCapacity = 0;
|
|
pfnExtend_ = JGadget::vector::extend_default;
|
|
}
|
|
|
|
~TVector() {
|
|
clear();
|
|
field_0x0.deallocate(pBegin_, 0);
|
|
}
|
|
|
|
T* insert(T* pos, const T& val) {
|
|
u32 diff = (u32)pos - (u32)begin();
|
|
insert(pos, 1, val);
|
|
return pBegin_ + diff;
|
|
}
|
|
|
|
void insert(T* pos, u32 count, const T& val) {
|
|
if (count != 0) {
|
|
T* this_00 = Insert_raw(pos, count);
|
|
if (this_00 != end()) {
|
|
std::uninitialized_fill_n(this_00, count, val);
|
|
}
|
|
}
|
|
}
|
|
|
|
T* Insert_raw(T* pos, u32 count) {
|
|
if (count == 0) {
|
|
return pos;
|
|
}
|
|
if (mCapacity < count + size()) {
|
|
u32 uVar4 = GetSize_extend_(count);
|
|
T* ppvVar5 = field_0x0.allocate(uVar4, NULL);
|
|
if (ppvVar5 == NULL) {
|
|
pos = end();
|
|
} else {
|
|
TDestructed_deallocate_ aTStack_30(&field_0x0, ppvVar5);
|
|
T* ppvVar6 = std::uninitialized_copy(pBegin_, pos, ppvVar5);
|
|
std::uninitialized_copy(pos, pEnd_, ppvVar6 + count);
|
|
DestroyElement_all_();
|
|
aTStack_30.set(pBegin_);
|
|
u32 uVar2 = (u32)pEnd_ - (u32)pBegin_;
|
|
pEnd_ = ppvVar5 + count + (uVar2 / 4);
|
|
pBegin_ = ppvVar5;
|
|
mCapacity = uVar4;
|
|
pos = ppvVar6;
|
|
}
|
|
} else {
|
|
T* ppvVar5 = pos + count;
|
|
if (ppvVar5 < pEnd_) {
|
|
T* ppvVar6 = pEnd_ - count;
|
|
std::uninitialized_copy(ppvVar6, pEnd_, pEnd_);
|
|
std::copy_backward(pos, ppvVar6, pEnd_);
|
|
DestroyElement_(pos, ppvVar5);
|
|
pEnd_ += count;
|
|
} else {
|
|
std::uninitialized_copy(pos, pEnd_, ppvVar5);
|
|
DestroyElement_(pos, pEnd_);
|
|
pEnd_ += count;
|
|
}
|
|
}
|
|
return pos;
|
|
}
|
|
|
|
T* begin() {
|
|
return pBegin_;
|
|
}
|
|
|
|
T* end() {
|
|
return pEnd_;
|
|
}
|
|
|
|
u32 size() {
|
|
if (pBegin_ == 0) {
|
|
return 0;
|
|
}
|
|
return ((u32)pEnd_ - (u32)pBegin_) / 4;
|
|
}
|
|
|
|
u32 capacity() { return mCapacity; }
|
|
|
|
u32 GetSize_extend_(u32 count) {
|
|
u32 iVar2 = size();
|
|
u32 uVar3 = capacity();
|
|
u32 uVar4 = pfnExtend_(uVar3, iVar2, count);
|
|
if (uVar4 < iVar2 + count) {
|
|
uVar4 = iVar2 + count;
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
void DestroyElement_(T* start, T* end) {
|
|
for (; start != end; start++) {
|
|
field_0x0.destroy(start);
|
|
}
|
|
}
|
|
|
|
void DestroyElement_all_() {
|
|
DestroyElement_(pBegin_, pEnd_);
|
|
}
|
|
|
|
T* erase(T* start, T* end) {
|
|
T* vectorEnd = pEnd_;
|
|
T* ppvVar3 = std::copy(end, vectorEnd, start);
|
|
DestroyElement_(ppvVar3, pEnd_);
|
|
pEnd_ = ppvVar3;
|
|
return start;
|
|
}
|
|
|
|
void clear() {
|
|
erase(begin(), end());
|
|
}
|
|
|
|
Allocator field_0x0;
|
|
T* pBegin_;
|
|
T* pEnd_;
|
|
u32 mCapacity;
|
|
extendFunc pfnExtend_;
|
|
};
|
|
/* TVector<void*, JGadget::TAllocator<void*>> */
|
|
struct TVector__template0 {
|
|
/* 802DD130 */ void func_802DD130(void* _this, void**, void* const&);
|
|
/* 802DCE1C */ void func_802DCE1C(void* _this, void**, u32, void* const&);
|
|
/* 802DCE8C */ void func_802DCE8C(void* _this, void**, u32);
|
|
};
|
|
|
|
struct TVector_pointer_void : public TVector<void*> {
|
|
/* 802DCCD0 */ TVector_pointer_void(JGadget::TAllocator<void*> const&);
|
|
/* 802DCCFC */ ~TVector_pointer_void();
|
|
/* 802DCDA4 */ void insert(void**, void* const&);
|
|
/* 802DCDC4 */ void** erase(void**, void**);
|
|
};
|
|
|
|
}; // namespace JGadget
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" void extend_default__Q27JGadget6vectorFUlUlUl();
|
|
extern "C" void func_802DCCD0();
|
|
extern "C" void __dt__Q27JGadget20TVector_pointer_voidFv();
|
|
extern "C" void insert__Q27JGadget20TVector_pointer_voidFPPvRCPv();
|
|
extern "C" void erase__Q27JGadget20TVector_pointer_voidFPPvPPv();
|
|
extern "C" void func_802DCE1C(void* _this, void**, u32, void* const&);
|
|
extern "C" void func_802DCE8C(void* _this, void**, u32);
|
|
extern "C" void func_802DD130(void* _this, void**, void* const&);
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void* __nw__FUl();
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void _savegpr_27();
|
|
extern "C" void _savegpr_29();
|
|
extern "C" void _restgpr_27();
|
|
extern "C" void _restgpr_29();
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 802DCCC8-802DCCD0 2D7608 0008+00 1/1 0/0 0/0 .text extend_default__Q27JGadget6vectorFUlUlUl */
|
|
u32 JGadget::vector::extend_default(u32 param_0, u32 param_1, u32 param_2) {
|
|
return param_1 << 1;
|
|
}
|
|
|
|
/* 802DCCD0-802DCCFC 2D7610 002C+00 0/0 1/1 0/0 .text
|
|
* __ct__Q27JGadget20TVector_pointer_voidFRCQ27JGadget14TAllocator<Pv> */
|
|
JGadget::TVector_pointer_void::TVector_pointer_void(JGadget::TAllocator<void*> const& param_0) : TVector<void*>(param_0) {
|
|
}
|
|
|
|
/* 802DCCFC-802DCDA4 2D763C 00A8+00 0/0 2/2 0/0 .text __dt__Q27JGadget20TVector_pointer_voidFv */
|
|
JGadget::TVector_pointer_void::~TVector_pointer_void() {
|
|
}
|
|
|
|
/* 802DCDA4-802DCDC4 2D76E4 0020+00 0/0 1/1 0/0 .text
|
|
* insert__Q27JGadget20TVector_pointer_voidFPPvRCPv */
|
|
// the entire function chain needs work
|
|
#ifdef NONMATCHING
|
|
void JGadget::TVector_pointer_void::insert(void** param_0, void* const& param_1) {
|
|
TVector<void*>::insert(param_0, param_1);
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void JGadget::TVector_pointer_void::insert(void** param_0, void* const& param_1) {
|
|
nofralloc
|
|
#include "asm/JSystem/JGadget/std-vector/insert__Q27JGadget20TVector_pointer_voidFPPvRCPv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 802DCDC4-802DCE1C 2D7704 0058+00 0/0 1/1 0/0 .text
|
|
* erase__Q27JGadget20TVector_pointer_voidFPPvPPv */
|
|
void** JGadget::TVector_pointer_void::erase(void** param_0, void** param_1) {
|
|
return TVector<void*>::erase(param_0, param_1);
|
|
}
|
|
|
|
/* 802DCE1C-802DCE8C 2D775C 0070+00 1/1 0/0 0/0 .text
|
|
* insert__Q27JGadget38TVector<Pv,Q27JGadget14TAllocator<Pv>>FPPvUlRCPv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
extern "C" asm void func_802DCE1C(void* _this, void** param_0, u32 param_1, void* const& param_2) {
|
|
nofralloc
|
|
#include "asm/JSystem/JGadget/std-vector/func_802DCE1C.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 802DCE8C-802DD130 2D77CC 02A4+00 1/1 0/0 0/0 .text
|
|
* Insert_raw__Q27JGadget38TVector<Pv,Q27JGadget14TAllocator<Pv>>FPPvUl */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
extern "C" asm void func_802DCE8C(void* _this, void** param_0, u32 param_1) {
|
|
nofralloc
|
|
#include "asm/JSystem/JGadget/std-vector/func_802DCE8C.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 802DD130-802DD188 2D7A70 0058+00 1/1 0/0 0/0 .text
|
|
* insert__Q27JGadget38TVector<Pv,Q27JGadget14TAllocator<Pv>>FPPvRCPv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
extern "C" asm void func_802DD130(void* _this, void** param_0, void* const& param_1) {
|
|
nofralloc
|
|
#include "asm/JSystem/JGadget/std-vector/func_802DD130.s"
|
|
}
|
|
#pragma pop
|