Add (and use) generic reference counter, to improve signal:noise ratio
[people/holger/gpxe.git] / src / include / gpxe / refcnt.h
1 #ifndef _GPXE_REFCNT_H
2 #define _GPXE_REFCNT_H
3
4 /** @file
5  *
6  * Reference counting
7  *
8  */
9
10 /**
11  * A reference counter
12  *
13  * This data structure is designed to be embedded within a
14  * reference-counted object.
15  */
16 struct refcnt {
17         /** Current reference count
18          *
19          * When this count is decremented below zero, the free()
20          * method will be called.
21          */
22         int refcnt;
23         /** Free containing object
24          *
25          * This method is called when the reference count is
26          * decremented below zero.
27          *
28          * If this method is left NULL, the standard library free()
29          * function will be called.  The upshot of this is that you
30          * may omit the free() method if the @c refcnt object is the
31          * first element of your reference-counted struct.
32          */
33         void ( * free ) ( struct refcnt *refcnt );
34 };
35
36 extern void ref_get ( struct refcnt *refcnt );
37 extern void ref_put ( struct refcnt *refcnt );
38
39 #endif /* _GPXE_REFCNT_H */