| Return Type | Function name | Arguments |
|---|---|---|
| unsigned int | hzChain::Append | (const void*,unsigned int,) |
Declared in file: hzChain.h
Defined in file : hzChain.cpp
Function Logic:
Function body:
unsigned int hzChain::Append (const void* vpStr, unsigned int nBytes)
{
_hzfunc("hzChain::Append(1)") ;
_zblk* curBlk ;
_zblk* newBlk ;
const char* i ;
uint32_t nCan ;
uint32_t nWritten = 0;
if (!nBytes)
return nBytes ;
if (!mx)
{ mx = new _chain() ; mx->m_Test = mx ; }
if (!mx->m_Begin)
mx->m_Begin = mx->m_End = _zblk_alloc() ;
curBlk = (_zblk*) mx->m_End ;
if (!curBlk)
hzexit(E_MEMORY, "Chain %p has no end block\n", this) ;
i = (char*) vpStr ;
for (; nWritten < nBytes ;)
{
if (curBlk->m_nUsage == ZBLKSIZE)
{
newBlk = _zblk_alloc() ;
newBlk->Prev(curBlk) ;
curBlk->Next(newBlk) ;
mx->m_End = curBlk = newBlk ;
}
nCan = ZBLKSIZE - curBlk->m_nUsage ;
if ((nWritten + nCan) > nBytes)
nCan = nBytes - nWritten ;
memcpy(curBlk->m_Data + curBlk->m_nUsage, i, nCan) ;
curBlk->m_nUsage += nCan ;
i += nCan ;
mx->m_nSize += nCan ;
nWritten += nCan ;
}
return nWritten ;
}