00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __UT_StackBuffer_h__
00022 #define __UT_StackBuffer_h__
00023
00024 template <typename T, size_t THRESHOLD>
00025 class UT_StackBuffer
00026 {
00027 public:
00028 UT_StackBuffer(size_t num_elems)
00029 {
00030 if (num_elems <= THRESHOLD)
00031 myData = myBuffer;
00032 else
00033 myData = new T[num_elems];
00034 }
00035 ~UT_StackBuffer()
00036 {
00037 if (myData != myBuffer)
00038 delete [] myData;
00039 }
00040
00041 operator T *()
00042 {
00043 return myData;
00044 }
00045 operator const T *() const
00046 {
00047 return (const T *)myData;
00048 }
00049
00050 private:
00051 T myBuffer[THRESHOLD];
00052 T * myData;
00053 };
00054
00055 #endif // __UT_StackBuffer_h__