| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzArray::Add | (const OBJ&,) |
Declared and defined in file: hzTmplArray.h
Function Logic:
Function body:
hzEcode hzArray::Add (const OBJ& obj)
{
_hzfunc("hzArray::Add") ;
_hz_ar_data* pDN ;
_hz_ar_indx* pIdx ;
uint32_t x ;
uint32_t n ;
uint32_t f ;
uint32_t dnAddr ;
uint32_t nSlot ;
if (!mx)
mx = new _array_ca() ;
mx->Lock() ;
if (!mx->m_pRoot)
{
mx->m_nNoDN = 1;
pDN = new _hz_ar_data() ;
pDN->m_Objs[0]= obj ;
mx->m_pRoot = pDN ;
mx->m_nLevel = 1;
mx->m_nCount = 1;
mx->Unlock() ;
return E_OK ;
}
if (mx->m_nCount < HZ_ARRAY_NODESIZE)
{
pDN = (_hz_ar_data*) mx->m_pRoot ;
pDN->m_Objs[mx->m_nCount] = obj ;
mx->m_nCount++ ;
mx->Unlock() ;
return E_OK ;
}
if (mx->m_nCount == (mx->m_nFactor * HZ_ARRAY_NODESIZE))
{
mx->m_nNoIN++ ;
pIdx = new _hz_ar_indx() ;
pIdx->m_Ptrs[0]= mx->m_pRoot ;
mx->m_pRoot = pIdx ;
mx->m_nLevel++ ;
mx->m_nFactor *= HZ_ARRAY_NODESIZE ;
}
pIdx = (_hz_ar_indx*) mx->m_pRoot ;
for (x = mx->m_nCount, f = mx->m_nFactor ; f >&eq; (HZ_ARRAY_NODESIZE * HZ_ARRAY_NODESIZE) ;)
{
n = x/f ; x %= f ; f /= HZ_ARRAY_NODESIZE ;
if (!pIdx->m_Ptrs[n])
{ mx->m_nNoIN++ ; pIdx->m_Ptrs[n] = new _hz_ar_indx() ; }
pIdx = (_hz_ar_indx*) pIdx->m_Ptrs[n] ;
}
dnAddr = x/f ;
if (!pIdx->m_Ptrs[dnAddr])
{ mx->m_nNoDN++ ; pIdx->m_Ptrs[dnAddr] = new _hz_ar_data() ; }
pDN = (_hz_ar_data*) pIdx->m_Ptrs[dnAddr] ;
nSlot = x%f ;
pDN->m_Objs[nSlot] = obj ;
mx->m_nCount++ ;
mx->Unlock() ;
return E_OK ;
}