/* * Copyright (c) 2026, Chloe M. * Provided under the BSD-3 clause. * * Description: Object manager cache * Author: Chloe M. */ #ifndef _OB_CACHE_H_ #define _OB_CACHE_H_ 1 #include #include /* * An object cache allows deallocated objects to be recycled without * the overhead of true deallocation and reallocation. * * @First: First cache entry * @Last: Last cache entry * @EntryCount: Number of entires in the cache */ typedef struct { ST_OBJECT *First; ST_OBJECT *Last; USIZE EntryCount; } OBJECT_CACHE; extern OBJECT_CACHE gObCache; /* * Initialize object cache * * @Cache: Object cache to initialize */ VOID ObInitCache(OBJECT_CACHE *Cache); /* * Reclaim object to cache if the reference count is * zero. * * @Cache: Cache to reclaim to * @Object: Object to reclaim */ VOID ObReclaimToCache(OBJECT_CACHE *Cache, ST_OBJECT *Object); /* * Pop an entry for a zeroed object from the cache * * @Cache: Cache to pop from * * Returns an entry on success, otherwise NULL on * failure */ ST_OBJECT *ObPopFromCache(OBJECT_CACHE *Cache); #endif /* !_OB_CACHE_H_ */