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>
126 getObject(
const FactoryType &factory,
int level )
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>
179 typedef ALUMemoryProviderSingleThread < Object > MemoryProvider ;
181 std::vector< MemoryProvider > memProviders_;
183 MemoryProvider& memProvider(
const unsigned int thread )
186 return memProviders_[
thread ];
200 static inline int thread() {
return MemoryProvider :: thread(); }
203 static inline int maxThreads() {
return MemoryProvider :: maxThreads(); }
221 template <
class FactoryType>
224 return memProvider(
thread() ).getObject( factory, level );
228 template <
class FactoryType,
class EntityImp>
231 return memProvider(
thread() ).getEntityObject( factory, level, fakePtr );
241 template <
class ObjectImp>
281 template <
class ObjectImp>
358 ptr().object().invalidate();
379 operator bool ()
const {
return bool(
ptr_ ); }
#define alugrid_assert(EX)
Definition alugrid_assert.hh:20
Definition alu3dinclude.hh:50
organize the memory management for entitys used by the NeighborIterator
Definition memory.hh:25
static int maxThreads()
Definition memory.hh:54
void setThreadNumber(const int thread)
set thread number this memory provider works for
Definition memory.hh:76
ALUMemoryProviderSingleThread(const ALUMemoryProviderSingleThread &org)
copy constructor
Definition memory.hh:71
Object ObjectType
Definition memory.hh:39
void freeObject(ObjectType *obj)
free, move element to stack, returns NULL
Definition memory.hh:164
ObjectType * getEmptyObject()
return object, if created default constructor is used
Definition memory.hh:140
ALUMemoryProviderSingleThread()
default constructor
Definition memory.hh:66
~ALUMemoryProviderSingleThread()
call deleteEntity
Definition memory.hh:153
ObjectType * stackObject()
Definition memory.hh:106
ObjectType * getObject(const FactoryType &factory, int level)
i.e. return pointer to Entity
Definition memory.hh:126
static int thread()
Definition memory.hh:42
ObjectType * getEntityObject(const FactoryType &factory, int level, EntityImp *)
i.e. return pointer to Entity
Definition memory.hh:87
organize the memory management for entitys used by the NeighborIterator
Definition memory.hh:178
static int maxThreads()
Definition memory.hh:203
ObjectType * getEmptyObject()
return object, if created default constructor is used
Definition memory.hh:235
ALUMemoryProvider(const ALUMemoryProvider &org)
copy constructor (don't copy memory providers)
Definition memory.hh:215
void freeObject(ObjectType *obj)
free, move element to stack, returns NULL
Definition memory.hh:238
ObjectType * getEntityObject(const FactoryType &factory, int level, EntityImp *fakePtr)
i.e. return pointer to Entity
Definition memory.hh:229
ObjectType * getObject(const FactoryType &factory, int level)
i.e. return pointer to Entity
Definition memory.hh:222
Object ObjectType
Definition memory.hh:206
ALUMemoryProvider()
default constructor
Definition memory.hh:209
static int thread()
Definition memory.hh:200
void operator++()
increase reference count
Definition memory.hh:266
unsigned int & refCount()
Definition memory.hh:251
ObjectImp ObjectType
Definition memory.hh:246
ObjectType & object()
Definition memory.hh:278
bool operator!() const
return true if object has no references anymore
Definition memory.hh:272
void reset()
reset status and reference count
Definition memory.hh:256
const ObjectType & object() const
Definition memory.hh:277
ObjectType object_
Definition memory.hh:249
bool unique() const
return true if there exists more then on reference
Definition memory.hh:275
const unsigned int & refCount() const
Definition memory.hh:252
void operator--()
decrease reference count
Definition memory.hh:269
void removeObject()
Definition memory.hh:338
void assign(const SharedPointer &other)
Definition memory.hh:329
ReferenceCountedObjectType * ptr_
Definition memory.hh:393
SharedPointer(const SharedPointer &other)
Definition memory.hh:312
SharedPointer & operator=(const SharedPointer &other)
Definition memory.hh:369
void getObject()
Definition memory.hh:323
void invalidate()
Definition memory.hh:353
SharedPointer()
Definition memory.hh:297
static MemoryPoolType & memoryPool()
Definition memory.hh:289
ObjectImp ObjectType
Definition memory.hh:285
ObjectType & operator*()
Definition memory.hh:386
ReferenceCountedObjectType & ptr()
Definition memory.hh:390
~SharedPointer()
Definition memory.hh:318
ReferenceCountedObject< ObjectType > ReferenceCountedObjectType
Definition memory.hh:286
bool unique() const
Definition memory.hh:383
const ReferenceCountedObjectType & ptr() const
Definition memory.hh:391
ALUMemoryProvider< ReferenceCountedObjectType > MemoryPoolType
Definition memory.hh:287
bool operator==(const SharedPointer &other) const
Definition memory.hh:381