Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/general/moveablemem.hpp
3206 views
1
#ifndef FILE_MOVEABLEMEM
2
#define FILE_MOVEABLEMEM
3
4
/**************************************************************************/
5
/* File: moveablemem.hpp */
6
/* Author: Joachim Schoeberl */
7
/* Date: 12. Feb. 2003 */
8
/**************************************************************************/
9
10
11
extern NgMutex mem_mutex;
12
13
class BaseMoveableMem
14
{
15
public:
16
static size_t totalsize;
17
static size_t used;
18
19
private:
20
static char * largeblock;
21
static BaseMoveableMem *first, *last;
22
23
BaseMoveableMem *prev, *next;
24
size_t size, pos;
25
char * ptr;
26
char * name;
27
28
protected:
29
BaseMoveableMem (size_t s = 0);
30
~BaseMoveableMem () throw();
31
void Alloc (size_t s);
32
void ReAlloc (size_t s);
33
void MoveTo (size_t newpos);
34
void Free () throw();
35
char * Ptr() { return ptr; }
36
char * Ptr() const { return ptr; }
37
void Swap (BaseMoveableMem & m2) throw();
38
public:
39
void SetName (const char * aname);
40
static void Print ();
41
42
friend class BaseDynamicMem;
43
};
44
45
46
47
48
template <typename T>
49
class MoveableMem : public BaseMoveableMem
50
{
51
public:
52
MoveableMem (size_t s = 0)
53
: BaseMoveableMem (sizeof(T) * s)
54
{
55
;
56
}
57
void Alloc (size_t s)
58
{
59
BaseMoveableMem::Alloc (sizeof(T) * s);
60
}
61
void ReAlloc (size_t s)
62
{
63
BaseMoveableMem::ReAlloc (sizeof(T) * s);
64
}
65
void Free ()
66
{
67
BaseMoveableMem::Free ();
68
}
69
70
const T * Ptr() const
71
{
72
return reinterpret_cast<const T*> (BaseMoveableMem::Ptr());
73
}
74
75
T * Ptr()
76
{
77
return reinterpret_cast<T*> (BaseMoveableMem::Ptr());
78
}
79
80
operator T* () const
81
{
82
return reinterpret_cast<T*> (BaseMoveableMem::Ptr());
83
}
84
85
operator T* ()
86
{
87
return reinterpret_cast<T*> (BaseMoveableMem::Ptr());
88
}
89
90
void Swap (MoveableMem<T> & m2)
91
{
92
BaseMoveableMem::Swap (m2);
93
}
94
protected:
95
MoveableMem (const MoveableMem & m) { ; }
96
MoveableMem & operator= (const MoveableMem & m) { ; }
97
};
98
99
#endif
100
101