mirror of
https://github.com/zeldaret/tp
synced 2026-06-04 02:47:02 -04:00
96ffd91c9a
There are a few places where JASGlobalInstance have their sInstance storage implemented via template specialization. The problem is that these have no initializer, which means that they are not proper definitions (only declarations) in standards-compliant C++. MSVC and (evidently) MWCC accept this, but modern Clang and GCC do not and won't emit symbols. I've added a macro that properly initializes these outside MWCC. Also, JASGlobalInstance<JAUSectionHeap> was only being declared in each actor file that used it, which sounds incorrect? Not sure about this but I added it to m_Do_main too, again behind MWERKS check.
90 lines
1.6 KiB
C++
90 lines
1.6 KiB
C++
#ifndef JASGADGET_H
|
|
#define JASGADGET_H
|
|
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include <string>
|
|
|
|
#ifdef __MWERKS__
|
|
#define JAS_GLOBAL_INSTANCE_INIT
|
|
#else
|
|
#define JAS_GLOBAL_INSTANCE_INIT {}
|
|
#endif
|
|
|
|
/**
|
|
* @ingroup jsystem-jaudio
|
|
*
|
|
*/
|
|
template<class T>
|
|
class JASGlobalInstance {
|
|
public:
|
|
JASGlobalInstance(T* inst) {
|
|
sInstance = inst;
|
|
}
|
|
|
|
JASGlobalInstance(bool setInstance) {
|
|
if (setInstance) {
|
|
JUT_ASSERT(186, sInstance == NULL);
|
|
sInstance = (T*)this;
|
|
}
|
|
}
|
|
|
|
~JASGlobalInstance() {
|
|
if (sInstance == (T*)this) {
|
|
sInstance = NULL;
|
|
}
|
|
}
|
|
|
|
static T* getInstance() { return sInstance; }
|
|
|
|
static T* sInstance;
|
|
};
|
|
|
|
/**
|
|
* @ingroup jsystem-jaudio
|
|
*
|
|
*/
|
|
template<class T>
|
|
class JASPtrTable {
|
|
public:
|
|
JASPtrTable(T** param_0, u32 size) {
|
|
mTable = param_0;
|
|
mSize = size;
|
|
memset(mTable, 0, size * 4);
|
|
}
|
|
T* get(u32 index) {
|
|
if (index >= mSize) {
|
|
return NULL;
|
|
}
|
|
return mTable[index];
|
|
}
|
|
T* get(u32 index) const {
|
|
if (index >= mSize) {
|
|
return NULL;
|
|
}
|
|
return mTable[index];
|
|
}
|
|
void set(u32 index, T* value) {
|
|
JUT_ASSERT(229, index < mSize);
|
|
mTable[index] = value;
|
|
}
|
|
|
|
private:
|
|
/* 0x00 */ T** mTable;
|
|
/* 0x04 */ u32 mSize;
|
|
};
|
|
|
|
/**
|
|
* @ingroup jsystem-jaudio
|
|
*
|
|
*/
|
|
template<class T, size_t N>
|
|
class JASPtrArray : public JASPtrTable<T> {
|
|
public:
|
|
JASPtrArray() : JASPtrTable<T>(mArray, N) {}
|
|
|
|
private:
|
|
/* 0x08 */ T* mArray[N];
|
|
};
|
|
|
|
#endif /* JASGADGET_H */
|