summaryrefslogtreecommitdiff
path: root/BlockFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'BlockFactory.cpp')
-rw-r--r--BlockFactory.cpp43
1 files changed, 27 insertions, 16 deletions
diff --git a/BlockFactory.cpp b/BlockFactory.cpp
index 03c6e8a..5d9d63b 100644
--- a/BlockFactory.cpp
+++ b/BlockFactory.cpp
@@ -6,32 +6,43 @@ BlockFactory blockFactory;
BlockFactory::BlockFactory(void)
{
- poolSize = 0;
+ poolSize = 0;
+ blocksCreated = 0;
}
BlockFactory::~BlockFactory(void)
{
- for(uint32_t i=0; i<poolSize; i++){
- free( pool[i] );
- }
+ for(uint32_t i=0; i<poolSize; i++){
+ free( pool[i] );
+ blocksCreated--;
+ }
+ poolSize = 0;
+ pool.clear();
}
Block* BlockFactory::allocateBlock(){
- if( poolSize > 0 ){
- poolSize--;
- Block* b = pool[poolSize];
- pool.pop_back();
- return b;
- }
-
- //pool is empty(full), just New up a new block
- Block* b = (Block*) malloc( sizeof(Block) );
- return b;
+ if( poolSize > 0 ){
+ poolSize--;
+ Block* b = pool[poolSize];
+ pool.pop_back();
+ return b;
+ }
+
+ //pool is empty(full), just New up a new block
+ blocksCreated++;
+ Block* b = (Block*) malloc( sizeof(Block) );
+ return b;
}
void BlockFactory::deleteBlock(Block *b){
- poolSize++;
- pool.push_back( b );
+ if(2*poolSize < blocksCreated){
+ poolSize++;
+ pool.push_back( b );
+ }
+ else{
+ blocksCreated--;
+ free( b );
+ }
}