Path: blob/devel/ElmerGUI/netgen/libsrc/general/moveablemem.hpp
3206 views
#ifndef FILE_MOVEABLEMEM1#define FILE_MOVEABLEMEM23/**************************************************************************/4/* File: moveablemem.hpp */5/* Author: Joachim Schoeberl */6/* Date: 12. Feb. 2003 */7/**************************************************************************/8910extern NgMutex mem_mutex;1112class BaseMoveableMem13{14public:15static size_t totalsize;16static size_t used;1718private:19static char * largeblock;20static BaseMoveableMem *first, *last;2122BaseMoveableMem *prev, *next;23size_t size, pos;24char * ptr;25char * name;2627protected:28BaseMoveableMem (size_t s = 0);29~BaseMoveableMem () throw();30void Alloc (size_t s);31void ReAlloc (size_t s);32void MoveTo (size_t newpos);33void Free () throw();34char * Ptr() { return ptr; }35char * Ptr() const { return ptr; }36void Swap (BaseMoveableMem & m2) throw();37public:38void SetName (const char * aname);39static void Print ();4041friend class BaseDynamicMem;42};4344454647template <typename T>48class MoveableMem : public BaseMoveableMem49{50public:51MoveableMem (size_t s = 0)52: BaseMoveableMem (sizeof(T) * s)53{54;55}56void Alloc (size_t s)57{58BaseMoveableMem::Alloc (sizeof(T) * s);59}60void ReAlloc (size_t s)61{62BaseMoveableMem::ReAlloc (sizeof(T) * s);63}64void Free ()65{66BaseMoveableMem::Free ();67}6869const T * Ptr() const70{71return reinterpret_cast<const T*> (BaseMoveableMem::Ptr());72}7374T * Ptr()75{76return reinterpret_cast<T*> (BaseMoveableMem::Ptr());77}7879operator T* () const80{81return reinterpret_cast<T*> (BaseMoveableMem::Ptr());82}8384operator T* ()85{86return reinterpret_cast<T*> (BaseMoveableMem::Ptr());87}8889void Swap (MoveableMem<T> & m2)90{91BaseMoveableMem::Swap (m2);92}93protected:94MoveableMem (const MoveableMem & m) { ; }95MoveableMem & operator= (const MoveableMem & m) { ; }96};9798#endif99100101