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 ; }