added Mpool::swap().
fixed a bug in HashList::rehash() when the memory pool is enabled. added LinkedList::reverse()
This commit is contained in:
@ -132,6 +132,50 @@ Mpool::Block* Mpool::add_block ()
|
||||
return block;
|
||||
}
|
||||
|
||||
int Mpool::swap (Mpool& mpool)
|
||||
{
|
||||
// this function is sensitive to member variables changes.
|
||||
// whenever you add new member variables, this function require
|
||||
// relevant changes.
|
||||
|
||||
if (this->getMmgr() != mpool.getMmgr())
|
||||
{
|
||||
// disallow to swap contents if memory managers are different.
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (this != &mpool)
|
||||
{
|
||||
#if defined(QSE_DEBUG_MPOOL)
|
||||
qse_size_t org_nalloc = this->nalloc;
|
||||
qse_size_t org_navail = this->navail;
|
||||
|
||||
this->nalloc = mpool.nalloc;
|
||||
this->navail = mpool.navail;
|
||||
|
||||
mpool.nalloc = org_nalloc;
|
||||
mpool.navail = org_navail;
|
||||
#endif
|
||||
|
||||
Block* org_mp_blocks = this->mp_blocks;
|
||||
Chain* org_free_list = this->free_list;
|
||||
qse_size_t org_datum_size = this->datum_size;
|
||||
qse_size_t org_block_size = this->block_size;
|
||||
|
||||
this->mp_blocks = mpool.mp_blocks;
|
||||
this->free_list = mpool.free_list;
|
||||
this->datum_size = mpool.datum_size;
|
||||
this->block_size = mpool.block_size;
|
||||
|
||||
mpool.mp_blocks = org_mp_blocks;
|
||||
mpool.free_list = org_free_list;
|
||||
mpool.datum_size = org_datum_size;
|
||||
mpool.block_size = org_block_size;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
QSE_END_NAMESPACE(QSE)
|
||||
/////////////////////////////////
|
||||
|
Reference in New Issue
Block a user