Lines Matching defs:pHeapInt

180 #define ASSERT_PREV(pHeapInt, pBlock)  \
185 ASSERT_GE((pBlock)->pPrev, (pHeapInt) + 1); \
188 Assert((pBlock) == (PRTHEAPSIMPLEBLOCK)((pHeapInt) + 1)); \
195 ASSERT_L((pBlock)->pNext, (pHeapInt)->pvEnd); \
200 #define ASSERT_BLOCK(pHeapInt, pBlock) \
202 AssertMsg((pBlock)->pHeap == (pHeapInt), ("%p != %p\n", (pBlock)->pHeap, (pHeapInt))); \
203 ASSERT_GE((pBlock), (pHeapInt) + 1); \
204 ASSERT_L((pBlock), (pHeapInt)->pvEnd); \
205 ASSERT_NEXT(pHeapInt, pBlock); \
206 ASSERT_PREV(pHeapInt, pBlock); \
209 #define ASSERT_BLOCK_USED(pHeapInt, pBlock) \
211 AssertMsg((pBlock)->pHeap == (pHeapInt), ("%p != %p\n", (pBlock)->pHeap, (pHeapInt))); \
212 ASSERT_GE((pBlock), (pHeapInt) + 1); \
213 ASSERT_L((pBlock), (pHeapInt)->pvEnd); \
214 ASSERT_NEXT(pHeapInt, pBlock); \
215 ASSERT_PREV(pHeapInt, pBlock); \
218 #define ASSERT_FREE_PREV(pHeapInt, pBlock) \
222 ASSERT_GE((pBlock)->pPrev, (pHeapInt)->pFreeHead); \
227 Assert((pBlock) == (pHeapInt)->pFreeHead); \
230 #define ASSERT_FREE_NEXT(pHeapInt, pBlock) \
234 ASSERT_LE((pBlock)->pNext, (pHeapInt)->pFreeTail); \
239 Assert((pBlock) == (pHeapInt)->pFreeTail); \
243 # define ASSERT_FREE_CB(pHeapInt, pBlock) \
244 do { size_t cbCalc = ((pBlock)->Core.pNext ? (uintptr_t)(pBlock)->Core.pNext : (uintptr_t)(pHeapInt)->pvEnd) \
249 # define ASSERT_FREE_CB(pHeapInt, pBlock) do {} while (0)
253 #define ASSERT_BLOCK_FREE(pHeapInt, pBlock) \
254 do { ASSERT_BLOCK(pHeapInt, &(pBlock)->Core); \
256 ASSERT_GE((pBlock), (pHeapInt)->pFreeHead); \
257 ASSERT_LE((pBlock), (pHeapInt)->pFreeTail); \
258 ASSERT_FREE_NEXT(pHeapInt, pBlock); \
259 ASSERT_FREE_PREV(pHeapInt, pBlock); \
260 ASSERT_FREE_CB(pHeapInt, pBlock); \
264 #define ASSERT_ANCHOR(pHeapInt) \
265 do { AssertPtr(pHeapInt);\
266 Assert((pHeapInt)->uMagic == RTHEAPSIMPLE_MAGIC); \
274 static void rtHeapSimpleAssertAll(PRTHEAPSIMPLEINTERNAL pHeapInt);
276 static PRTHEAPSIMPLEBLOCK rtHeapSimpleAllocBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, size_t cb, size_t uAlignment);
277 static void rtHeapSimpleFreeBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, PRTHEAPSIMPLEBLOCK pBlock);
282 PRTHEAPSIMPLEINTERNAL pHeapInt;
297 pHeapInt = (PRTHEAPSIMPLEINTERNAL)pvMemory;
302 pHeapInt = (PRTHEAPSIMPLEINTERNAL)((uintptr_t)pvMemory + off);
308 pHeapInt->uMagic = RTHEAPSIMPLE_MAGIC;
309 pHeapInt->pvEnd = (uint8_t *)pHeapInt + cbMemory;
310 pHeapInt->cbHeap = cbMemory;
311 pHeapInt->cbFree = cbMemory
314 pHeapInt->pFreeTail = pHeapInt->pFreeHead = (PRTHEAPSIMPLEFREE)(pHeapInt + 1);
315 for (i = 0; i < RT_ELEMENTS(pHeapInt->auAlignment); i++)
316 pHeapInt->auAlignment[i] = ~(size_t)0;
319 pFree = pHeapInt->pFreeHead;
322 pFree->Core.pHeap = pHeapInt;
326 pFree->cb = pHeapInt->cbFree;
328 *phHeap = pHeapInt;
331 rtHeapSimpleAssertAll(pHeapInt);
340 PRTHEAPSIMPLEINTERNAL pHeapInt = hHeap;
346 AssertPtrReturn(pHeapInt, VERR_INVALID_HANDLE);
347 AssertReturn(pHeapInt->uMagic == RTHEAPSIMPLE_MAGIC, VERR_INVALID_HANDLE);
348 AssertMsgReturn((uintptr_t)pHeapInt - (uintptr_t)pHeapInt->pvEnd + pHeapInt->cbHeap == offDelta,
349 ("offDelta=%p, expected=%p\n", offDelta, (uintptr_t)pHeapInt->pvEnd - pHeapInt->cbHeap - (uintptr_t)pHeapInt),
356 RELOCATE_IT(pHeapInt->pvEnd, void *, offDelta);
357 RELOCATE_IT(pHeapInt->pFreeHead, PRTHEAPSIMPLEFREE, offDelta);
358 RELOCATE_IT(pHeapInt->pFreeTail, PRTHEAPSIMPLEFREE, offDelta);
363 for (pCur = (PRTHEAPSIMPLEFREE)(pHeapInt + 1);
364 pCur && (uintptr_t)pCur < (uintptr_t)pHeapInt->pvEnd;
382 rtHeapSimpleAssertAll(pHeapInt);
391 PRTHEAPSIMPLEINTERNAL pHeapInt = hHeap;
397 AssertPtrReturn(pHeapInt, NULL);
415 pBlock = rtHeapSimpleAllocBlock(pHeapInt, cb, cbAlignment);
428 PRTHEAPSIMPLEINTERNAL pHeapInt = hHeap;
434 AssertPtrReturn(pHeapInt, NULL);
452 pBlock = rtHeapSimpleAllocBlock(pHeapInt, cb, cbAlignment);
472 * @param pHeapInt The heap.
476 static PRTHEAPSIMPLEBLOCK rtHeapSimpleAllocBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, size_t cb, size_t uAlignment)
482 rtHeapSimpleAssertAll(pHeapInt);
488 for (pFree = pHeapInt->pFreeHead;
493 ASSERT_BLOCK_FREE(pHeapInt, pFree);
533 pPrev = (PRTHEAPSIMPLEBLOCK)(pHeapInt + 1);
537 pPrev->pHeap = pHeapInt;
540 pHeapInt->cbFree -= offAlign;
557 pHeapInt->pFreeTail = pFree;
561 pHeapInt->pFreeHead = pFree;
562 ASSERT_BLOCK_FREE(pHeapInt, pFree);
563 ASSERT_BLOCK_USED(pHeapInt, pPrev);
580 pNew->Core.pHeap = pHeapInt;
587 pHeapInt->pFreeTail = pNew;
592 pHeapInt->pFreeHead = pNew;
593 pNew->cb = (pNew->Core.pNext ? (uintptr_t)pNew->Core.pNext : (uintptr_t)pHeapInt->pvEnd) \
595 ASSERT_BLOCK_FREE(pHeapInt, pNew);
602 pHeapInt->cbFree -= pFree->cb;
603 pHeapInt->cbFree += pNew->cb;
605 ASSERT_BLOCK_USED(pHeapInt, pRet);
615 pHeapInt->pFreeTail = pFree->pPrev;
619 pHeapInt->pFreeHead = pFree->pNext;
624 pHeapInt->cbFree -= pFree->cb;
627 ASSERT_BLOCK_USED(pHeapInt, pRet);
633 rtHeapSimpleAssertAll(pHeapInt);
641 PRTHEAPSIMPLEINTERNAL pHeapInt;
656 pHeapInt = pBlock->pHeap;
657 ASSERT_BLOCK_USED(pHeapInt, pBlock);
658 ASSERT_ANCHOR(pHeapInt);
659 Assert(pHeapInt == (PRTHEAPSIMPLEINTERNAL)hHeap || !hHeap);
665 const size_t cbBlock = (pBlock->pNext ? (uintptr_t)pBlock->pNext : (uintptr_t)pHeapInt->pvEnd)
673 rtHeapSimpleFreeBlock(pHeapInt, pBlock);
681 * @param pHeapInt The heap.
684 static void rtHeapSimpleFreeBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, PRTHEAPSIMPLEBLOCK pBlock)
691 rtHeapSimpleAssertAll(pHeapInt);
700 if (pHeapInt->pFreeTail)
705 ASSERT_BLOCK(pHeapInt, &pRight->Core);
709 pLeft = pHeapInt->pFreeTail;
712 ASSERT_BLOCK_FREE(pHeapInt, pRight);
716 ASSERT_BLOCK_FREE(pHeapInt, pLeft);
728 Assert(pRight == pHeapInt->pFreeHead);
735 pHeapInt->pFreeTail = pFree;
736 pHeapInt->pFreeHead = pFree;
748 pHeapInt->cbFree -= pLeft->cb;
763 pHeapInt->pFreeTail = pFree;
783 pHeapInt->pFreeTail = pFree;
784 pHeapInt->cbFree -= pRight->cb;
790 pFree->cb = (pFree->Core.pNext ? (uintptr_t)pFree->Core.pNext : (uintptr_t)pHeapInt->pvEnd)
792 pHeapInt->cbFree += pFree->cb;
793 ASSERT_BLOCK_FREE(pHeapInt, pFree);
796 rtHeapSimpleAssertAll(pHeapInt);
804 * @param pHeapInt
806 static void rtHeapSimpleAssertAll(PRTHEAPSIMPLEINTERNAL pHeapInt)
811 for (pBlock = (PRTHEAPSIMPLEFREE)(pHeapInt + 1);
817 ASSERT_BLOCK_FREE(pHeapInt, pBlock);
819 Assert(pPrevFree || pHeapInt->pFreeHead == pBlock);
823 ASSERT_BLOCK_USED(pHeapInt, &pBlock->Core);
827 Assert(pHeapInt->pFreeTail == pPrevFree);
834 PRTHEAPSIMPLEINTERNAL pHeapInt;
850 pHeapInt = pBlock->pHeap;
851 ASSERT_BLOCK_USED(pHeapInt, pBlock);
852 ASSERT_ANCHOR(pHeapInt);
853 Assert(pHeapInt == (PRTHEAPSIMPLEINTERNAL)hHeap || !hHeap);
858 cbBlock = (pBlock->pNext ? (uintptr_t)pBlock->pNext : (uintptr_t)pHeapInt->pvEnd)
867 PRTHEAPSIMPLEINTERNAL pHeapInt;
872 pHeapInt = hHeap;
873 AssertPtrReturn(pHeapInt, 0);
874 ASSERT_ANCHOR(pHeapInt);
875 return pHeapInt->cbHeap;
882 PRTHEAPSIMPLEINTERNAL pHeapInt;
887 pHeapInt = hHeap;
888 AssertPtrReturn(pHeapInt, 0);
889 ASSERT_ANCHOR(pHeapInt);
890 return pHeapInt->cbFree;
897 PRTHEAPSIMPLEINTERNAL pHeapInt = (PRTHEAPSIMPLEINTERNAL)hHeap;
901 hHeap, pHeapInt->cbHeap, pHeapInt->cbFree);
903 for (pBlock = (PRTHEAPSIMPLEFREE)(pHeapInt + 1);
907 size_t cb = (pBlock->pNext ? (uintptr_t)pBlock->Core.pNext : (uintptr_t)pHeapInt->pvEnd)
911 pBlock, (uintptr_t)pBlock - (uintptr_t)(pHeapInt + 1), pBlock->Core.pNext, pBlock->Core.pPrev, pBlock->Core.fFlags, cb,
915 pBlock, (uintptr_t)pBlock - (uintptr_t)(pHeapInt + 1), pBlock->Core.pNext, pBlock->Core.pPrev, pBlock->Core.fFlags, cb);