3#ifndef DUNE_ALU3DGRIDMEMORY_HH
4#define DUNE_ALU3DGRIDMEMORY_HH
12 template<
class T,
int length>
13 class ALUGridFiniteStack ;
19 template <
class Object>
22 enum { maxStackObjects = 256 };
23 typedef ALUGridSpace :: ALUGridFiniteStack< Object* , maxStackObjects > StackType ;
28 StackType& objStack() {
return objStack_ ; }
31 typedef Object ObjectType;
38 : objStack_( org.objStack_ )
45 template <
class FactoryType>
46 ObjectType *
getObject(
const FactoryType &factory,
int level);
49 template <
class FactoryType,
class EntityImp>
50 inline ObjectType *
getEntityObject(
const FactoryType& factory,
int level , EntityImp * fakePtr )
52 if( objStack().empty() )
54 return (
new ObjectType(EntityImp(factory,level) ));
72 inline ObjectType * stackObject()
74 assert( ! objStack().empty() );
76 return objStack().pop();
87 template <
class Object>
template <
class FactoryType>
88 inline typename ALUMemoryProvider<Object>::ObjectType *
90 (
const FactoryType &factory,
int level )
92 if( objStack().empty() )
94 return (
new Object (factory, level) );
102 template <
class Object>
103 inline typename ALUMemoryProvider<Object>::ObjectType *
105 (
const ObjectType & org )
107 if( objStack().empty() )
109 return (
new Object (org) );
113 return stackObject();
117 template <
class Object>
118 inline typename ALUMemoryProvider<Object>::ObjectType *
121 if( objStack().empty() )
123 return new Object () ;
127 return stackObject();
131 template <
class Object>
134 StackType& objStk = objStack_;
135 while ( ! objStk.empty() )
137 ObjectType * obj = objStk.pop();
142 template <
class Object>
145 StackType& stk = objStack();
152#undef USE_FINITE_STACK
organize the memory management for entitys used by the NeighborIterator
Definition: memory.hh:21
ObjectType * getObjectCopy(const ObjectType &org)
i.e. return pointer to Entity
Definition: memory.hh:105
ObjectType * getObject(const FactoryType &factory, int level)
i.e. return pointer to Entity
Definition: memory.hh:90
void freeObject(ObjectType *obj)
free, move element to stack, returns NULL
Definition: memory.hh:143
~ALUMemoryProvider()
call deleteEntity
Definition: memory.hh:132
ObjectType * getEntityObject(const FactoryType &factory, int level, EntityImp *fakePtr)
i.e. return pointer to Entity
Definition: memory.hh:50
ALUMemoryProvider(const ALUMemoryProvider< Object > &org)
do not copy pointers
Definition: memory.hh:37
ALUMemoryProvider()
default constructor
Definition: memory.hh:34
ObjectType * getEmptyObject()
return object, if created default constructor is used
Definition: memory.hh:119
Dune namespace.
Definition: alignment.hh:14