#ifndef _GPXE_REFCNT_H #define _GPXE_REFCNT_H /** @file * * Reference counting * */ FILE_LICENCE ( GPL2_OR_LATER ); /** * A reference counter * * This data structure is designed to be embedded within a * reference-counted object. * * Reference-counted objects are freed when their reference count * drops below zero. This means that a freshly allocated-and-zeroed * reference-counted object will be freed on the first call to * ref_put(). */ struct refcnt { /** Current reference count * * When this count is decremented below zero, the free() * method will be called. */ int refcnt; /** Free containing object * * This method is called when the reference count is * decremented below zero. * * If this method is left NULL, the standard library free() * function will be called. The upshot of this is that you * may omit the free() method if the @c refcnt object is the * first element of your reference-counted struct. */ void ( * free ) ( struct refcnt *refcnt ); }; extern struct refcnt * ref_get ( struct refcnt *refcnt ); extern void ref_put ( struct refcnt *refcnt ); #endif /* _GPXE_REFCNT_H */