Lines Matching defs:pTbl

37 VBOXHTABLEDECL(int) CrHTableCreate(PCRHTABLE pTbl, uint32_t cSize)
39 memset(pTbl, 0, sizeof (*pTbl));
42 pTbl->paData = (void**)RTMemAllocZ(sizeof (pTbl->paData[0]) * cSize);
43 if (pTbl->paData)
45 pTbl->cSize = cSize;
52 VBOXHTABLEDECL(void) CrHTableDestroy(PCRHTABLE pTbl)
54 if (!pTbl->paData)
57 RTMemFree(pTbl->paData);
60 int crHTableRealloc(PCRHTABLE pTbl, uint32_t cNewSize)
62 Assert(cNewSize > pTbl->cSize);
63 if (cNewSize > pTbl->cSize)
65 void **pvNewData = (void**)RTMemAllocZ(sizeof (pTbl->paData[0]) * cNewSize);
68 WARN(("RTMemAllocZ failed for size (%d)", (int)(sizeof (pTbl->paData[0]) * cNewSize)));
71 memcpy(pvNewData, pTbl->paData, sizeof (pTbl->paData[0]) * pTbl->cSize);
72 RTMemFree(pTbl->paData);
73 pTbl->iNext2Search = pTbl->cSize;
74 pTbl->cSize = cNewSize;
75 pTbl->paData = pvNewData;
78 else if (cNewSize >= pTbl->cData)
88 VBOXHTABLEDECL(int) CrHTableRealloc(PCRHTABLE pTbl, uint32_t cNewSize)
90 return crHTableRealloc(pTbl, cNewSize);
93 VBOXHTABLEDECL(void) CrHTableEmpty(PCRHTABLE pTbl)
95 pTbl->cData = 0;
96 pTbl->iNext2Search = 0;
97 if (pTbl->cSize)
98 memset(pTbl->paData, 0, sizeof (pTbl->paData[0]) * pTbl->cSize);
101 static void* crHTablePutToSlot(PCRHTABLE pTbl, uint32_t iSlot, void* pvData)
104 void* pvOld = pTbl->paData[iSlot];
105 pTbl->paData[iSlot] = pvData;
107 ++pTbl->cData;
108 Assert(pTbl->cData <= pTbl->cSize);
112 VBOXHTABLEDECL(int) CrHTablePutToSlot(PCRHTABLE pTbl, CRHTABLE_HANDLE hHandle, void* pvData)
120 if (iIndex >= pTbl->cSize)
122 int rc = crHTableRealloc(pTbl, iIndex + RT_MAX(10, pTbl->cSize/4));
130 crHTablePutToSlot(pTbl, iIndex, pvData);
135 VBOXHTABLEDECL(CRHTABLE_HANDLE) CrHTablePut(PCRHTABLE pTbl, void* pvData)
143 if (pTbl->cSize == pTbl->cData)
145 int rc = crHTableRealloc(pTbl, pTbl->cSize + RT_MAX(10, pTbl->cSize/4));
152 for (uint32_t i = pTbl->iNext2Search; ; ++i, i %= pTbl->cSize)
154 Assert(i < pTbl->cSize);
155 if (!pTbl->paData[i])
157 void *pvOld = crHTablePutToSlot(pTbl, i, pvData);
159 pTbl->iNext2Search = i+1;
160 pTbl->iNext2Search %= pTbl->cSize;
168 VBOXHTABLEDECL(void*) CrHTableRemove(PCRHTABLE pTbl, CRHTABLE_HANDLE hHandle)
171 Assert(iIndex < pTbl->cSize);
172 if (iIndex < pTbl->cSize)
174 void* pvData = pTbl->paData[iIndex];
177 pTbl->paData[iIndex] = NULL;
178 --pTbl->cData;
179 Assert(pTbl->cData <= pTbl->cSize);
180 pTbl->iNext2Search = iIndex;
188 VBOXHTABLEDECL(void*) CrHTableGet(PCRHTABLE pTbl, CRHTABLE_HANDLE hHandle)
191 if (iIndex < pTbl->cSize)
192 return pTbl->paData[iIndex];