mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 18:51:11 +00:00
c1a4db611b
Original commit message from CVS: Add monkeyaudio plugin
89 lines
2 KiB
C++
89 lines
2 KiB
C++
#ifndef APE_SMARTPTR_H
|
|
#define APE_SMARTPTR_H
|
|
|
|
// disable the operator -> on UDT warning
|
|
#ifdef _WIN32
|
|
# pragma warning( push )
|
|
# pragma warning( disable : 4284 )
|
|
#endif
|
|
|
|
/*************************************************************************************************
|
|
CSmartPtr - a simple smart pointer class that can automatically initialize and free memory
|
|
note: (doesn't do garbage collection / reference counting because of the many pitfalls)
|
|
*************************************************************************************************/
|
|
template <class TYPE> class CSmartPtr
|
|
{
|
|
public:
|
|
TYPE * m_pObject;
|
|
BOOL m_bArray;
|
|
BOOL m_bDelete;
|
|
|
|
CSmartPtr()
|
|
{
|
|
m_bDelete = TRUE;
|
|
m_pObject = NULL;
|
|
}
|
|
CSmartPtr(TYPE * a_pObject, BOOL a_bArray = FALSE, BOOL a_bDelete = TRUE)
|
|
{
|
|
m_bDelete = TRUE;
|
|
m_pObject = NULL;
|
|
Assign(a_pObject, a_bArray, a_bDelete);
|
|
}
|
|
|
|
~CSmartPtr()
|
|
{
|
|
Delete();
|
|
}
|
|
|
|
void Assign(TYPE * a_pObject, BOOL a_bArray = FALSE, BOOL a_bDelete = TRUE)
|
|
{
|
|
Delete();
|
|
|
|
m_bDelete = a_bDelete;
|
|
m_bArray = a_bArray;
|
|
m_pObject = a_pObject;
|
|
}
|
|
|
|
void Delete()
|
|
{
|
|
if (m_bDelete && m_pObject)
|
|
{
|
|
if (m_bArray)
|
|
delete [] m_pObject;
|
|
else
|
|
delete m_pObject;
|
|
|
|
m_pObject = NULL;
|
|
}
|
|
}
|
|
|
|
void SetDelete(const BOOL a_bDelete)
|
|
{
|
|
m_bDelete = a_bDelete;
|
|
}
|
|
|
|
__inline TYPE * GetPtr() const
|
|
{
|
|
return m_pObject;
|
|
}
|
|
|
|
__inline operator TYPE * () const
|
|
{
|
|
return m_pObject;
|
|
}
|
|
|
|
__inline TYPE * operator ->() const
|
|
{
|
|
return m_pObject;
|
|
}
|
|
|
|
// declare assignment, but don't implement (compiler error if we try to use)
|
|
// that way we can't carelessly mix smart pointers and regular pointers
|
|
__inline void * operator =(void *) const;
|
|
};
|
|
|
|
#ifdef _WIN32
|
|
# pragma warning( pop )
|
|
#endif
|
|
|
|
#endif /* APE_SMARTPTR_H */
|