00001
00005
00006 #ifndef _H_IMG_MemPtr
00007 #define _H_IMG_MemPtr
00008
00009 #include <stddef.h>
00010
00017
00018 template <class T> class IMG_MemPtr {
00019 public:
00021 T* m_p;
00022 bool m_owned;
00023
00028 class Size {};
00033 class Memory {};
00034
00041 IMG_MemPtr(size_t s)
00042 : m_p(0), m_owned(false)
00043 {
00044 if (s > 0) {
00045 m_p = new T[s];
00046 if (!m_p) {
00047 throw Memory();
00048 }
00049 m_owned = true;
00050 }
00051 else {
00052 throw Size();
00053 }
00054 }
00055
00062 IMG_MemPtr(void* p, size_t s)
00063 : m_p(0), m_owned(false)
00064 {
00065 if (p && (s > 0)) {
00066 m_p = (T*)p;
00067 }
00068 else {
00069 throw Size();
00070 }
00071 }
00072
00076 ~IMG_MemPtr() { if (m_p && m_owned) { delete [] m_p; m_p = 0; } }
00077
00082 operator T*() { return m_p; }
00083 };
00084
00085 #endif // _H_IMG_MemPtr