Path: blob/devel/ElmerGUI/netgen/libsrc/general/dynamicmem.hpp
3206 views
#ifndef FILE_DYNAMICMEM1#define FILE_DYNAMICMEM23/**************************************************************************/4/* File: dynamicmem.hpp */5/* Author: Joachim Schoeberl */6/* Date: 12. Feb. 2003 */7/**************************************************************************/89101112class BaseDynamicMem13{14private:15static BaseDynamicMem *first, *last;1617BaseDynamicMem *prev, *next;18size_t size;19char * ptr;20char * name;2122protected:23BaseDynamicMem ();24~BaseDynamicMem ();25void Alloc (size_t s);26void ReAlloc (size_t s);27void Free ();28char * Ptr() { return ptr; }29const char * Ptr() const { return ptr; }30void Swap (BaseDynamicMem & m2);31public:32void SetName (const char * aname);33static void Print ();34static void GetUsed (int nr, char * ch);35};363738template <typename T>39class DynamicMem : public BaseDynamicMem40{41public:42DynamicMem ()43: BaseDynamicMem ()44{45;46}47DynamicMem (size_t s)48: BaseDynamicMem ()49{50Alloc (s);51}52void Alloc (size_t s)53{54BaseDynamicMem::Alloc (sizeof(T) * s);55}56void ReAlloc (size_t s)57{58BaseDynamicMem::ReAlloc (sizeof(T) * s);59}60void Free ()61{62BaseDynamicMem::Free ();63}6465const T * Ptr() const66{67return reinterpret_cast<const T*> (BaseDynamicMem::Ptr());68}6970T * Ptr()71{72return reinterpret_cast<T*> (BaseDynamicMem::Ptr());73}7475operator const T* () const76{77return reinterpret_cast<const T*> (BaseDynamicMem::Ptr());78}7980operator T* ()81{82return reinterpret_cast<T*> (BaseDynamicMem::Ptr());83}8485void Swap (DynamicMem<T> & m2)86{87BaseDynamicMem::Swap (m2);88}89protected:90DynamicMem (const DynamicMem & m);91DynamicMem & operator= (const DynamicMem & m);92};9394#endif959697