diff options
| author | Jonas Ask | 2009-11-22 20:34:25 +0000 |
|---|---|---|
| committer | Jonas Ask | 2009-11-22 20:34:25 +0000 |
| commit | e6af6f34da302b7f4cc83a6a9affff5b4bdda845 (patch) | |
| tree | 29d132d4948a6632f181f475e2c8b1a65d29712f /BlockFactory.cpp | |
| parent | 3b8c43aee92898159672807bc759317aefdb208b (diff) | |
| download | stonesense-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.cpp | 37 |
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 |
