Go to the documentation of this file. 1 #ifndef DUNE_ALU3DGRIDMEMORY_HH
2 #define DUNE_ALU3DGRIDMEMORY_HH
13 #include <dune/fem/misc/threads/threadmanager.hh>
19 template<
class T,
int length >
23 template <
class Object>
26 enum { maxStackObjects = 256 };
27 typedef ::ALUGrid::ALUGridFiniteStack< Object *, maxStackObjects >
StackType;
36 StackType &objStack () {
return objStack_; }
45 return omp_get_thread_num();
47 return Dune::Fem :: ThreadManager :: thread() ;
57 return omp_get_max_threads();
59 return Dune::Fem :: ThreadManager :: maxThreads() ;
67 : objStack_(), thread_( -1 )
72 : objStack_(), thread_( org.thread_ )
82 template <
class FactoryType>
86 template <
class FactoryType,
class EntityImp>
89 if( objStack().empty() )
91 return new ObjectType( EntityImp(factory,level) );
113 return objStack().pop();
123 template <
class Object>
template <
class FactoryType>
128 if( objStack().empty() )
130 return (
new Object (factory, level) );
134 return stackObject();
138 template <
class Object>
142 if( objStack().empty() )
144 return new Object () ;
148 return stackObject();
152 template <
class Object>
156 while ( ! objStk.empty() )
163 template <
class Object>
176 template <
class Object>
181 std::vector< MemoryProvider > memProviders_;
186 return memProviders_[
thread ];
221 template <
class FactoryType>
228 template <
class FactoryType,
class EntityImp>
241 template <
class ObjectImp>
281 template <
class ObjectImp>
379 operator bool ()
const {
return bool(
ptr_ ); }
398 #endif // #ifndef DUNE_ALU3DGRIDMEMORY_HH
Object ObjectType
Definition: memory.hh:206
ObjectType * getEntityObject(const FactoryType &factory, int level, EntityImp *fakePtr)
i.e. return pointer to Entity
Definition: memory.hh:229
void freeObject(ObjectType *obj)
free, move element to stack, returns NULL
Definition: memory.hh:238
void invalidate()
Definition: memory.hh:353
static MemoryPoolType & memoryPool()
Definition: memory.hh:289
Object ObjectType
Definition: memory.hh:39
void operator++()
increase reference count
Definition: memory.hh:266
const ObjectType & object() const
Definition: memory.hh:277
ALUMemoryProvider< ReferenceCountedObjectType > MemoryPoolType
Definition: memory.hh:287
ObjectImp ObjectType
Definition: memory.hh:285
ObjectType * getEmptyObject()
return object, if created default constructor is used
Definition: memory.hh:140
ObjectType * getObject(const FactoryType &factory, int level)
i.e. return pointer to Entity
Definition: memory.hh:126
void operator--()
decrease reference count
Definition: memory.hh:269
void setThreadNumber(const int thread)
set thread number this memory provider works for
Definition: memory.hh:76
SharedPointer & operator=(const SharedPointer &other)
Definition: memory.hh:369
organize the memory management for entitys used by the NeighborIterator
Definition: memory.hh:24
unsigned int & refCount()
Definition: memory.hh:251
ObjectImp ObjectType
Definition: memory.hh:246
ObjectType * getEntityObject(const FactoryType &factory, int level, EntityImp *)
i.e. return pointer to Entity
Definition: memory.hh:87
ALUMemoryProviderSingleThread()
default constructor
Definition: memory.hh:66
const unsigned int & refCount() const
Definition: memory.hh:252
void assign(const SharedPointer &other)
Definition: memory.hh:329
ObjectType & operator*()
Definition: memory.hh:386
static int maxThreads()
Definition: memory.hh:203
~SharedPointer()
Definition: memory.hh:318
bool unique() const
Definition: memory.hh:383
Definition: memory.hh:242
const ReferenceCountedObjectType & ptr() const
Definition: memory.hh:391
bool operator==(const SharedPointer &other) const
Definition: memory.hh:381
void removeObject()
Definition: memory.hh:338
static int thread()
Definition: memory.hh:42
#define alugrid_assert(EX)
Definition: alugrid_assert.hh:20
ReferenceCountedObjectType * ptr_
Definition: memory.hh:393
ALUMemoryProviderSingleThread(const ALUMemoryProviderSingleThread &org)
copy constructor
Definition: memory.hh:71
void freeObject(ObjectType *obj)
free, move element to stack, returns NULL
Definition: memory.hh:164
bool unique() const
return true if there exists more then on reference
Definition: memory.hh:275
ALUMemoryProvider(const ALUMemoryProvider &org)
copy constructor (don't copy memory providers)
Definition: memory.hh:215
SharedPointer(const SharedPointer &other)
Definition: memory.hh:312
ObjectType * getObject(const FactoryType &factory, int level)
i.e. return pointer to Entity
Definition: memory.hh:222
bool operator!() const
return true if object has no references anymore
Definition: memory.hh:272
Definition: alu3dinclude.hh:49
ObjectType * stackObject()
Definition: memory.hh:106
organize the memory management for entitys used by the NeighborIterator
Definition: memory.hh:177
void getObject()
Definition: memory.hh:323
static int thread()
Definition: memory.hh:200
ObjectType object_
Definition: memory.hh:249
ReferenceCountedObject< ObjectType > ReferenceCountedObjectType
Definition: memory.hh:286
~ALUMemoryProviderSingleThread()
call deleteEntity
Definition: memory.hh:153
SharedPointer()
Definition: memory.hh:297
ReferenceCountedObjectType & ptr()
Definition: memory.hh:390
static int maxThreads()
Definition: memory.hh:54
Definition: memory.hh:282
ObjectType * getEmptyObject()
return object, if created default constructor is used
Definition: memory.hh:235
void reset()
reset status and reference count
Definition: memory.hh:256
ALUMemoryProvider()
default constructor
Definition: memory.hh:209
ObjectType & object()
Definition: memory.hh:278