minor cleanup.

This commit is contained in:
Lee Thomason 2012-02-06 09:14:14 -08:00
parent d198322032
commit 455c9d4dd0
2 changed files with 26 additions and 20 deletions

View File

@ -572,10 +572,16 @@ XMLDocument::~XMLDocument()
ClearChildren(); ClearChildren();
delete [] charBuffer; delete [] charBuffer;
TIXMLASSERT( textPool.NAlloc() == 0 ); /*
TIXMLASSERT( elementPool.NAlloc() == 0 ); textPool.Trace( "text" );
TIXMLASSERT( commentPool.NAlloc() == 0 ); elementPool.Trace( "element" );
TIXMLASSERT( attributePool.NAlloc() == 0 ); commentPool.Trace( "comment" );
attributePool.Trace( "attribute" );
*/
TIXMLASSERT( textPool.CurrentAllocs() == 0 );
TIXMLASSERT( elementPool.CurrentAllocs() == 0 );
TIXMLASSERT( commentPool.CurrentAllocs() == 0 );
TIXMLASSERT( attributePool.CurrentAllocs() == 0 );
} }

View File

@ -4,7 +4,7 @@
/* /*
TODO TODO
- const and non-const versions of API - const and non-const versions of API
- memory pool the class construction X memory pool the class construction
- attribute accessors - attribute accessors
- node navigation - node navigation
- handles - handles
@ -12,17 +12,7 @@
- make constructors protected - make constructors protected
- hide copy constructor - hide copy constructor
- hide = operator - hide = operator
- #define to remove mem-pooling, and make thread safe
- UTF8 support: isAlpha, etc. - UTF8 support: isAlpha, etc.
(No reason to ever cast to base)
XMLBase -> Utility
XMLNode
Document
Pooled
Element
Text
*/ */
#include <limits.h> #include <limits.h>
@ -176,7 +166,7 @@ template< int SIZE >
class MemPoolT : public MemPool class MemPoolT : public MemPool
{ {
public: public:
MemPoolT() : root( 0 ), nAlloc( 0 ) {} MemPoolT() : root(0), currentAllocs(0), nAllocs(0), maxAllocs(0) {}
~MemPoolT() { ~MemPoolT() {
// Delete the blocks. // Delete the blocks.
for( int i=0; i<blockPtrs.Size(); ++i ) { for( int i=0; i<blockPtrs.Size(); ++i ) {
@ -185,7 +175,7 @@ public:
} }
virtual int ItemSize() const { return SIZE; } virtual int ItemSize() const { return SIZE; }
int NAlloc() const { return nAlloc; } int CurrentAllocs() const { return currentAllocs; }
virtual void* Alloc() { virtual void* Alloc() {
if ( !root ) { if ( !root ) {
@ -201,17 +191,24 @@ public:
} }
void* result = root; void* result = root;
root = root->next; root = root->next;
++nAlloc;
++currentAllocs;
if ( currentAllocs > maxAllocs ) maxAllocs = currentAllocs;
nAllocs++;
return result; return result;
} }
virtual void Free( void* mem ) { virtual void Free( void* mem ) {
if ( !mem ) return; if ( !mem ) return;
--nAlloc; --currentAllocs;
Chunk* chunk = (Chunk*)mem; Chunk* chunk = (Chunk*)mem;
memset( chunk, 0xfe, sizeof(Chunk) ); memset( chunk, 0xfe, sizeof(Chunk) );
chunk->next = root; chunk->next = root;
root = chunk; root = chunk;
} }
void Trace( const char* name ) {
printf( "Mempool %s watermark=%d current=%d size=%d nAlloc=%d blocks=%d\n",
name, maxAllocs, currentAllocs, SIZE, nAllocs, blockPtrs.Size() );
}
private: private:
enum { COUNT = 1024/SIZE }; enum { COUNT = 1024/SIZE };
@ -224,7 +221,10 @@ private:
}; };
DynArray< Block*, 10 > blockPtrs; DynArray< Block*, 10 > blockPtrs;
Chunk* root; Chunk* root;
int nAlloc;
int currentAllocs;
int nAllocs;
int maxAllocs;
}; };