summaryrefslogtreecommitdiff
path: root/BlockFactory.cpp
diff options
context:
space:
mode:
authorJonas Ask2009-11-22 20:34:25 +0000
committerJonas Ask2009-11-22 20:34:25 +0000
commite6af6f34da302b7f4cc83a6a9affff5b4bdda845 (patch)
tree29d132d4948a6632f181f475e2c8b1a65d29712f /BlockFactory.cpp
parent3b8c43aee92898159672807bc759317aefdb208b (diff)
downloadstonesense-e6af6f34da302b7f4cc83a6a9affff5b4bdda845.tar.gz
stonesense-e6af6f34da302b7f4cc83a6a9affff5b4bdda845.tar.bz2
stonesense-e6af6f34da302b7f4cc83a6a9affff5b4bdda845.tar.xz
Block allocation is now handled by a BlockFactor singleton. This saves A LOT of New/Deletes.
Diffstat (limited to 'BlockFactory.cpp')
-rw-r--r--BlockFactory.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/BlockFactory.cpp b/BlockFactory.cpp
new file mode 100644
index 0000000..8c860a7
--- /dev/null
+++ b/BlockFactory.cpp
@@ -0,0 +1,37 @@
+#include "BlockFactory.h"
+#include "Block.h"
+
+
+BlockFactory blockFactory;
+
+BlockFactory::BlockFactory(void)
+{
+ poolSize = 0;
+}
+
+BlockFactory::~BlockFactory(void)
+{
+ for(uint32_t i=0; i<poolSize; i++){
+ free( pool[i] );
+ }
+}
+
+
+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;
+}
+
+
+void BlockFactory::deleteBlock(Block *b){
+ poolSize++;
+ pool.push_back( b );
+} \ No newline at end of file