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