Bool PoolOfAddr(Pool *poolReturn, Arena arena, Addr addr) { Tract tract; AVER(poolReturn != NULL); AVERT(Arena, arena); if (TractOfAddr(&tract, arena, addr)) { *poolReturn = TractPool(tract); return TRUE; } return FALSE; }
Tract TractOfBaseAddr(Arena arena, Addr addr) { Tract tract = NULL; Bool found; AVERT_CRITICAL(Arena, arena); AVER_CRITICAL(AddrIsAligned(addr, ArenaGrainSize(arena))); /* Check first in the cache, see <design/arena/#tract.cache>. */ if (arena->lastTractBase == addr) { tract = arena->lastTract; } else { found = TractOfAddr(&tract, arena, addr); AVER_CRITICAL(found); } AVER_CRITICAL(TractBase(tract) == addr); return tract; }