Clarify "block" and "chunk"
diff --git a/tinyxml2.h b/tinyxml2.h
index fb4376d..ffc9797 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -315,7 +315,7 @@
/*
Template child class to create pools of the correct type.
*/
-template< int SIZE >
+template< int ITEM_SIZE >
class MemPoolT : public MemPool
{
public:
@@ -338,7 +338,7 @@
}
virtual int ItemSize() const {
- return SIZE;
+ return ITEM_SIZE;
}
int CurrentAllocs() const {
return _currentAllocs;
@@ -350,13 +350,15 @@
Block* block = new Block();
_blockPtrs.Push( block );
- for( int i=0; i<COUNT-1; ++i ) {
- block->chunk[i].next = &block->chunk[i+1];
+ Item* blockItems = block->items;
+ for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
+ blockItems[i].next = &(blockItems[i + 1]);
}
- block->chunk[COUNT-1].next = 0;
- _root = block->chunk;
+ blockItems[ITEMS_PER_BLOCK - 1].next = 0;
+ _root = blockItems;
}
- void* result = _root;
+ Item* const result = _root;
+ TIXMLASSERT( result != 0 );
_root = _root->next;
++_currentAllocs;
@@ -373,16 +375,17 @@
return;
}
--_currentAllocs;
- Chunk* chunk = static_cast<Chunk*>( mem );
+ Item* item = static_cast<Item*>( mem );
#ifdef DEBUG
- memset( chunk, 0xfe, sizeof(Chunk) );
+ memset( item, 0xfe, sizeof( *item ) );
#endif
- chunk->next = _root;
- _root = chunk;
+ item->next = _root;
+ _root = item;
}
void Trace( const char* name ) {
printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
- name, _maxAllocs, _maxAllocs*SIZE/1024, _currentAllocs, SIZE, _nAllocs, _blockPtrs.Size() );
+ name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
+ ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
}
void SetTracked() {
@@ -402,21 +405,23 @@
// 16k: 5200
// 32k: 4300
// 64k: 4000 21000
- enum { COUNT = (4*1024)/SIZE }; // Some compilers do not accept to use COUNT in private part if COUNT is private
+ // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
+ // in private part if ITEMS_PER_BLOCK is private
+ enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
private:
MemPoolT( const MemPoolT& ); // not supported
void operator=( const MemPoolT& ); // not supported
- union Chunk {
- Chunk* next;
- char mem[SIZE];
+ union Item {
+ Item* next;
+ char itemData[ITEM_SIZE];
};
struct Block {
- Chunk chunk[COUNT];
+ Item items[ITEMS_PER_BLOCK];
};
DynArray< Block*, 10 > _blockPtrs;
- Chunk* _root;
+ Item* _root;
int _currentAllocs;
int _nAllocs;