12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #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 */
|