+++ /dev/null
-/*
- Refcount
- --------
-
- An object that knows how and when to delete itself, using a reference counter.
-
- Whenever a reference to an object like this is obtained/kept, it needs to be grabbed,
- whenever a reference is discarded, it needs to be dropped.
-
- Made for use with the List/Tree/Map types: refcount_inc, refcount_grb, refcount_drp
- can be used as add, get, del callbacks.
-*/
-#ifndef _DRAGONSTD_REFCOUNT_H_ // include guard
-#define _DRAGONSTD_REFCOUNT_H_
-
-#include <pthread.h> // for pthread_mutex_t
-
-typedef struct {
- /* private */
- void *obj;
- void *del;
- unsigned short cnt; // counter
- pthread_mutex_t mtx; // lock to protect count
-} Refcount;
-
-void refcount_ini(Refcount *refcount, void *obj, void *del);
-/*
- Initializes the refcount.
-
- The refcount should be uninitialized or deleted before passed to this function.
- This function should be called before any other function is called on the refcount.
-*/
-
-void refcount_dst(Refcount *refcount);
-/*
- Destroy the refcount.
-
- This does NOT mean delete the object that the reference counter is referring to-
- This means delete the refcount structure itself (and is usually called from the
- delete callback of the referenced object).
-
- The refcount is unusable until reinitialized afterwards.
-*/
-
-void *refcount_inc(Refcount *refcount);
-/*
- [Thread Safe]
- Grab a reference to the refcount.
-
- Returns the refcount.
-*/
-
-void *refcount_grb(Refcount *rc);
-/*
- [Thread Safe]
- Does the same as refcount_inc, except it returns the referenced object instead of the
- refcount.
-*/
-
-void refcount_drp(Refcount *refcount);
-/*
- [Thread Safe]
- Drop a reference to the object.
-
- May delete the object using the del function if the counter gets down to zero.
-*/
-
-void *refcount_obj(Refcount *refcount);
-/*
- [Thread Safe]
- Return referenced object.
-*/
-
-#endif // _DRAGONSTD_REFCOUNT_H_