Lines Matching refs:pTbl

24 NTSTATUS vboxWddmHTableCreate(PVBOXWDDM_HTABLE pTbl, uint32_t cSize)
26 memset(pTbl, 0, sizeof (*pTbl));
27 pTbl->paData = (PVOID*)vboxWddmMemAllocZero(sizeof (pTbl->paData[0]) * cSize);
28 if (pTbl->paData)
30 pTbl->cSize = cSize;
36 VOID vboxWddmHTableDestroy(PVBOXWDDM_HTABLE pTbl)
38 if (!pTbl->paData)
41 vboxWddmMemFree(pTbl->paData);
54 NTSTATUS vboxWddmHTableRealloc(PVBOXWDDM_HTABLE pTbl, uint32_t cNewSize)
56 Assert(cNewSize > pTbl->cSize);
57 if (cNewSize > pTbl->cSize)
59 PVOID *pvNewData = (PVOID*)vboxWddmMemAllocZero(sizeof (pTbl->paData[0]) * cNewSize);
62 WARN(("vboxWddmMemAllocZero failed for size (%d)", sizeof (pTbl->paData[0]) * cNewSize));
65 memcpy(pvNewData, pTbl->paData, sizeof (pTbl->paData[0]) * pTbl->cSize);
66 vboxWddmMemFree(pTbl->paData);
67 pTbl->iNext2Search = pTbl->cSize;
68 pTbl->cSize = cNewSize;
69 pTbl->paData = pvNewData;
72 else if (cNewSize >= pTbl->cData)
80 VBOXWDDM_HANDLE vboxWddmHTablePut(PVBOXWDDM_HTABLE pTbl, PVOID pvData)
82 if (pTbl->cSize == pTbl->cData)
84 NTSTATUS Status = vboxWddmHTableRealloc(pTbl, pTbl->cSize + RT_MAX(10, pTbl->cSize/4));
89 for (UINT i = pTbl->iNext2Search; ; ++i, i %= pTbl->cSize)
91 Assert(i < pTbl->cSize);
92 if (!pTbl->paData[i])
94 pTbl->paData[i] = pvData;
95 ++pTbl->cData;
96 Assert(pTbl->cData <= pTbl->cSize);
97 ++pTbl->iNext2Search;
98 pTbl->iNext2Search %= pTbl->cSize;
106 PVOID vboxWddmHTableRemove(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle)
109 Assert(iIndex < pTbl->cSize);
110 if (iIndex < pTbl->cSize)
112 PVOID pvData = pTbl->paData[iIndex];
113 pTbl->paData[iIndex] = NULL;
114 --pTbl->cData;
115 Assert(pTbl->cData <= pTbl->cSize);
116 pTbl->iNext2Search = iIndex;
122 PVOID vboxWddmHTableGet(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle)
125 Assert(iIndex < pTbl->cSize);
126 if (iIndex < pTbl->cSize)
127 return pTbl->paData[iIndex];
131 VOID vboxWddmHTableIterInit(PVBOXWDDM_HTABLE pTbl, PVBOXWDDM_HTABLE_ITERATOR pIter)
133 pIter->pTbl = pTbl;
135 pIter->cLeft = pTbl->cData;
148 for (uint32_t i = pIter->iCur+1; i < pIter->pTbl->cSize ; ++i)
150 if (pIter->pTbl->paData[i])
158 return pIter->pTbl->paData[i];
176 PVOID pRet = vboxWddmHTableRemove(pIter->pTbl, hHandle);