Files
source/Standard Gaming Platform/sgp_auto_memory.h
T
majcostaandGitHub aaa8b094c9 remove UTIL and JA2 preprocessor definitions (#66)
UTIL is never used, and JA2 is always used. assumption being we'll never make 1.13 for Wizardry 8.

video2.h doesn't exist, which prevented me from deleting it.
2023-01-05 20:40:36 +02:00

112 lines
1.7 KiB
C++

#ifndef _SGP_AUTO_MEMORY_H_
#define _SGP_AUTO_MEMORY_H_
namespace sgp
{
/************************************************************/
template<typename T>
class TAutoArray
{
public:
T& operator[](size_t index)
{
return _array[index];
}
T* operator()()
{
return _array;
}
T* operator->()
{
return _array;
}
T& operator*()
{
return *_array;
}
bool operator!()
{
// NULL == _array
return !_array;
}
T* release()
{
T* tmp = _array;
_array = NULL;
return tmp;
}
protected:
T* _array;
};
/************************************************************/
template<typename T>
class AutoArray : public TAutoArray<T>
{
public:
AutoArray(size_t size)
{
_array = new T[size];
}
~AutoArray()
{
if(_array)
{
delete[] _array;
}
}
};
/************************************************************/
template<typename T, typename void*(*Alloc)(size_t) = malloc, typename void(*Dealloc)(void*) = free>
class AutoCArray : public TAutoArray<T>
{
public:
AutoCArray(size_t size = 1, size_t sizeof_elem=1)
{
_array = (T*)Alloc( size * sizeof_elem );
}
~AutoCArray()
{
if(_array)
{
Dealloc(_array);
}
}
};
/************************************************************/
} // namespace sgp
#include "MemMan.h"
namespace sgp
{
template<typename T>
class AutoMMArray : public sgp::TAutoArray<T>
{
public:
AutoMMArray(size_t size, size_t sizeof_elem=1)
{
_array = (T*)MemAlloc( size * sizeof_elem );
}
~AutoMMArray()
{
if(_array)
{
MemFree(_array);
}
}
};
}
#endif // _SGP_AUTO_MEMORY_H_