Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new DeleteAll STL helper based on retail; couple misc. fixes #318

Merged
merged 2 commits into from
Aug 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions src/system/char/Character.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Character::Lod::Lod(Hmx::Object* obj) : mScreenSize(0.0f), mGroup(obj, 0), mTran
}

Character::Lod::Lod(const Character::Lod& lod) : mScreenSize(lod.mScreenSize), mGroup(lod.mGroup), mTransGroup(lod.mTransGroup) {

}

Character::Lod& Character::Lod::operator=(const Character::Lod& lod){
Expand Down Expand Up @@ -88,8 +88,8 @@ void CharPollableSorter::AddDeps(Dep* me, const std::list<Hmx::Object*>& odeps,
void Character::Init(){ Register(); }
void Character::Terminate(){}

Character::Character() : mLods(this), mLastLod(0), mMinLod(0), mShadow(this, 0), mTransGroup(this, 0), mDriver(0),
mSelfShadow(0), mSpotCutout(0), mFloorShadow(1), mSphereBase(this, this), mBounding(), mPollState(kCharCreated), mTest(new CharacterTest(this)),
Character::Character() : mLods(this), mLastLod(0), mMinLod(0), mShadow(this, 0), mTransGroup(this, 0), mDriver(0),
mSelfShadow(0), mSpotCutout(0), mFloorShadow(1), mSphereBase(this, this), mBounding(), mPollState(kCharCreated), mTest(new CharacterTest(this)),
mFrozen(0), mDrawMode(kCharDrawAll), unk1f4(1), mInterestToForce(), unk1fc(this, 0), mDebugDrawInterestObjects(0) {

}
Expand Down Expand Up @@ -201,8 +201,7 @@ void Character::UnhookShadow(){
for(int i = 0; i < mShadowBones.size(); i++){

}
DeleteRange(mShadowBones.begin(), mShadowBones.end());
mShadowBones.clear();
DeleteAll(mShadowBones);
}

void Character::Replace(Hmx::Object* from, Hmx::Object* to){
Expand Down Expand Up @@ -485,4 +484,4 @@ BEGIN_PROPSYNCS(Character)
SYNC_PROP(CharacterTesting, *mTest)
#endif
SYNC_SUPERCLASS(RndDir)
END_PROPSYNCS
END_PROPSYNCS
12 changes: 2 additions & 10 deletions src/system/obj/MessageTimer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,7 @@ void MessageTimer::Init(){

void MessageTimer::Start(){
sActive = true;
DeleteRange(gEntries.begin(), gEntries.end());
// for(std::vector<EventEntry*>::iterator it = gEntries.begin(); it != gEntries.end(); ++it){
// EventEntry* ev = *it;
// if(ev){
// DeleteRange(ev->objs.begin(), ev->objs.end());
// }
// delete ev;
// }
gEntries.clear();
DeleteAll(gEntries);
}

void MessageTimer::Stop(){ sActive = false; }
Expand All @@ -66,4 +58,4 @@ void MessageTimer::Dump(){
e->objs[j]->Dump();
}
}
}
}
7 changes: 7 additions & 0 deletions src/system/obj/MessageTimer.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "os/Timer.h"
#include "os/Debug.h"
#include "utl/Symbol.h"
#include "utl/STLHelpers.h"

class ObjEntry {
public:
Expand All @@ -21,6 +22,12 @@ class EventEntry {
Symbol msgs; // 0x0
std::vector<ObjEntry*> objs; // 0x4

~EventEntry() {
for (int i = 0; i < objs.size(); i++) {
delete objs[i];
}
}

void Dump(){
float total = 0.0f;
for(int i = 0; i < objs.size(); i++){
Expand Down
7 changes: 3 additions & 4 deletions src/system/rndobj/PropAnim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,7 @@ bool RndPropAnim::ChangePropPath(Hmx::Object* o, DataArray* a1, DataArray* a2){
}

void RndPropAnim::RemoveKeys(){
DeleteRange(mPropKeys.begin(), mPropKeys.end());
mPropKeys.clear();
DeleteAll(mPropKeys);
}

PropKeys** RndPropAnim::FindKeys(Hmx::Object* o, DataArray* da){
Expand Down Expand Up @@ -321,7 +320,7 @@ void RndPropAnim::SetKeyVal(Hmx::Object* o, DataArray* da, float frame, const Da
break;
case PropKeys::kQuat:
cur->AsQuatKeys().Add(
Hmx::Quat(node.Array(0)->Float(0), node.Array(0)->Float(1), node.Array(0)->Float(2), node.Array(0)->Float(3)),
Hmx::Quat(node.Array(0)->Float(0), node.Array(0)->Float(1), node.Array(0)->Float(2), node.Array(0)->Float(3)),
frame, unique);
break;
default:
Expand Down Expand Up @@ -585,4 +584,4 @@ END_HANDLERS
BEGIN_PROPSYNCS(RndPropAnim)
SYNC_PROP(loop, mLoop)
SYNC_SUPERCLASS(RndAnimatable)
END_PROPSYNCS
END_PROPSYNCS
11 changes: 5 additions & 6 deletions src/system/ui/UIGridProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ UIGridProvider::UIGridProvider(UIListProvider* prov, int i) : mMasterProvider(pr
}

UIGridProvider::~UIGridProvider(){
DeleteRange(mSubProviders.begin(), mSubProviders.end());
mSubProviders.clear();
DeleteAll(mSubProviders);
}

UIListProvider* UIGridProvider::Provider(int, int i, UIListSubList*) const {
Expand All @@ -27,10 +26,10 @@ void UIGridProvider::InitData(RndDir* dir){ mMasterProvider->InitData(dir); }
int UIGridProvider::NumDataForSublistIndex(int idx) const {
int masternum = mMasterProvider->NumData();
int numData;

if(idx < masternum / mWidth) numData = mWidth;
else numData = masternum % mWidth;

MILO_ASSERT(( 0) <= (numData) && (numData) <= ( mWidth), 0xB9);
return numData;
}
Expand Down Expand Up @@ -69,7 +68,7 @@ int UIGridProvider::GetDataFromList(UIList* uilist){
if(child){
int data2 = uilist->SelectedData();
int data = child->SelectedData();

data += data2 * mWidth;
return data;
}
Expand All @@ -82,4 +81,4 @@ Symbol UIGridProvider::GetSymbolFromList(UIList* uilist){
return mMasterProvider->DataSymbol(data);
}
else return gNullStr;
}
}
14 changes: 7 additions & 7 deletions src/system/ui/UIList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,20 @@ std::list<UIList*> sUIListSet;

INIT_REVS(UIList)

UIList::UIList() : UITransitionHandler(this), mListDir(0), mListState(this, this), mDataProvider(0),
mNumData(100), mUser(0), mParent(0), mExtendedLabelEntries(this, kObjListNoNull),
mExtendedMeshEntries(this, kObjListNoNull), mExtendedCustomEntries(this, kObjListNoNull), mAutoScrollPause(2.0f), unk_0x1D8(1),
UIList::UIList() : UITransitionHandler(this), mListDir(0), mListState(this, this), mDataProvider(0),
mNumData(100), mUser(0), mParent(0), mExtendedLabelEntries(this, kObjListNoNull),
mExtendedMeshEntries(this, kObjListNoNull), mExtendedCustomEntries(this, kObjListNoNull), mAutoScrollPause(2.0f), unk_0x1D8(1),
unk_0x1DC(-1), mPaginate(0), mAutoScrollSendMessages(0), mAutoScrolling(0), unk_0x1E4(0), mDrawManuallyControlledWidgets(0),
unk_0x1E6(0), mNeedsGarbageCollection(0) {}

UIList::~UIList(){
for(std::list<UIList*>::iterator it = sUIListSet.begin(); it != sUIListSet.end(); it++){
if(*it == this){
it = sUIListSet.erase(it);
break;
}
}
DeleteRange(mWidgets.begin(), mWidgets.end());
mWidgets.clear();
DeleteAll(mWidgets);
delete mDataProvider;
mDataProvider = 0;
}
Expand Down Expand Up @@ -567,7 +567,7 @@ DataNode UIList::OnMsg(const ButtonDownMsg& msg){
return DataNode(1);
}
if(ScrollDirection(msg, cntType, sub->mListDir->Orientation() == kUIListVertical, sub->mListState.mGridSpan) == kAction_Confirm){

}
}
}
Expand Down Expand Up @@ -720,4 +720,4 @@ BEGIN_PROPSYNCS(UIList)
SYNC_PROP_SET(out_anim, GetOutAnim(), SetOutAnim(_val.Obj<RndAnimatable>(0)))
SYNC_SUPERCLASS(ScrollSelect)
SYNC_SUPERCLASS(UIComponent)
END_PROPSYNCS
END_PROPSYNCS
8 changes: 3 additions & 5 deletions src/system/ui/UIListDir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ UIListDir::UIListDir() : mOrientation(kUIListVertical), mFadeOffset(0), mElement
}

UIListDir::~UIListDir(){
DeleteRange(unk1fc.begin(), unk1fc.end());
unk1fc.clear();
DeleteAll(unk1fc);
}

UIListOrientation UIListDir::Orientation() const { return mOrientation; }
Expand All @@ -53,8 +52,7 @@ UIList* UIListDir::SubList(int i, std::vector<UIListWidget*>& vec){
}

void UIListDir::CreateElements(UIList* uilist, std::vector<UIListWidget*>& vec, int i){
DeleteRange(vec.begin(), vec.end());
vec.clear();
DeleteAll(vec);
for(ObjDirItr<UIListWidget> it(this, true); it != 0; ++it){
UIListWidget* widget = dynamic_cast<UIListWidget*>(Hmx::Object::NewObject(it->ClassName()));
widget->ResourceCopy(it);
Expand Down Expand Up @@ -229,4 +227,4 @@ BEGIN_HANDLERS(UIListDir)
HANDLE_ACTION(test_scroll, mTestState.Scroll(_msg->Int(2), false))
HANDLE_SUPERCLASS(RndDir)
HANDLE_CHECK(0x2C2)
END_HANDLERS
END_HANDLERS
17 changes: 14 additions & 3 deletions src/system/utl/STLHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,24 @@
#define UTL_STLHELPERS_H
#include <vector>

template <class T>
inline void DeleteInstance(const int& /* purpose not known yet */, T* t) {
delete t;
}

template <class Iter>
inline void DeleteRange(Iter begin, Iter end) {
inline void DeleteRange(Iter begin, Iter end, const int& asdf = int() /* purpose not known yet */) {
for (; begin != end; begin++) {
delete *begin;
DeleteInstance(asdf, *begin);
}
}

template <typename Container>
inline void DeleteAll(Container &container) {
DeleteRange(container.begin(), container.end());
container.clear();
}

template <class T1, class T2, class T3>
void VectorRemove(std::vector<T1,T2>& vec, const T3& obj){
for(std::vector<T1,T2>::iterator it = vec.begin(); it != vec.end(); ++it){
Expand All @@ -22,4 +33,4 @@ void VectorRemove(std::vector<T1,T2>& vec, const T3& obj){
// TODO: implement for RndTransformable.cpp
template <class T> void RemoveSwap(std::vector<T*>&, T*);

#endif
#endif
Loading