Lines Matching refs:pa
57 PoolAlloc* pa;
64 pa = alloc_fn(cc, sizeof(*pa));
65 VG_(memset)(pa, 0, sizeof(*pa));
66 pa->nrRef = 0;
67 pa->elemSzB = elemSzB;
68 pa->nPerPool = nPerPool;
69 pa->pools = NULL;
70 pa->alloc_fn = alloc_fn;
71 pa->cc = cc;
72 pa->free_fn = free_fn;
73 pa->pools = VG_(newXA)( alloc_fn, cc, free_fn, sizeof(void*) );
74 pa->nextFree = NULL;
76 return pa;
79 void VG_(deletePA) ( PoolAlloc* pa)
82 vg_assert(pa->nrRef == 0);
83 for (i = 0; i < VG_(sizeXA) (pa->pools); i++)
84 pa->free_fn (*(UWord **)VG_(indexXA) ( pa->pools, i ));
85 VG_(deleteXA) (pa->pools);
86 pa->free_fn (pa);
92 static void pal_add_new_pool ( PoolAlloc* pa )
96 vg_assert(pa);
97 vg_assert(pa->nextFree == NULL);
98 pool = pa->alloc_fn( pa->cc, pa->elemSzB * pa->nPerPool );
102 for (i = pa->nPerPool-1; i >= 0; i--) {
103 UChar* elemC = ((UChar*)pool) + i * pa->elemSzB;
106 *elem = (UWord)pa->nextFree;
107 pa->nextFree = elem;
110 VG_(addToXA)( pa->pools, &pool );
113 UWord VG_(sizePA) ( PoolAlloc* pa)
115 vg_assert(pa);
116 return pa->nPerPool * VG_(sizeXA) (pa->pools);
119 void* VG_(allocEltPA) ( PoolAlloc* pa)
122 if (UNLIKELY(pa->nextFree == NULL)) {
123 pal_add_new_pool(pa);
125 elem = pa->nextFree;
126 pa->nextFree = (void*)*elem;
131 void VG_(freeEltPA) ( PoolAlloc* pa, void* p)
134 *elem = (UWord)pa->nextFree;
135 pa->nextFree = elem;
139 void VG_(addRefPA) ( PoolAlloc* pa)
141 pa->nrRef++;
144 UWord VG_(releasePA)(PoolAlloc* pa)
148 vg_assert(pa->nrRef > 0);
149 nrRef = --pa->nrRef;
151 VG_(deletePA)(pa);