libqb  2.0.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Data Structures | Macros | Typedefs | Functions
qbhdb.h File Reference

The handle database is for reference counting objects. More...

#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#include <qb/qbarray.h>
Include dependency graph for qbhdb.h:

Data Structures

struct  qb_hdb_handle
 
struct  qb_hdb
 

Macros

#define _GNU_SOURCE
 
#define QB_HDB_D_FORMAT   "%" PRIu64
 
#define QB_HDB_X_FORMAT   "%" PRIx64
 
#define QB_HDB_DECLARE(database_name, destructor_function)
 Convience macro for declaring a file scoped handle database. More...
 

Typedefs

typedef uint64_t qb_handle_t
 Generic handle type is 64 bits. More...
 

Functions

void qb_hdb_create (struct qb_hdb *hdb)
 Create a new database. More...
 
void qb_hdb_destroy (struct qb_hdb *hdb)
 Destroy a handle database. More...
 
int32_t qb_hdb_handle_create (struct qb_hdb *hdb, int32_t instance_size, qb_handle_t *handle_id_out)
 Create a new handle. More...
 
int32_t qb_hdb_handle_get (struct qb_hdb *hdb, qb_handle_t handle_in, void **instance)
 Get the instance associated with this handle and increase it's refcount. More...
 
int32_t qb_hdb_handle_get_always (struct qb_hdb *hdb, qb_handle_t handle_in, void **instance)
 Get the instance associated with this handle and increase it's refcount. More...
 
int32_t qb_hdb_handle_put (struct qb_hdb *hdb, qb_handle_t handle_in)
 Put the instance associated with this handle and decrease it's refcount. More...
 
int32_t qb_hdb_handle_destroy (struct qb_hdb *hdb, qb_handle_t handle_in)
 Request the destruction of the object. More...
 
int32_t qb_hdb_handle_refcount_get (struct qb_hdb *hdb, qb_handle_t handle_in)
 Get the current refcount. More...
 
void qb_hdb_iterator_reset (struct qb_hdb *hdb)
 Reset the iterator. More...
 
int32_t qb_hdb_iterator_next (struct qb_hdb *hdb, void **instance, qb_handle_t *handle)
 Get the next object and increament it's refcount. More...
 
uint32_t qb_hdb_base_convert (qb_handle_t handle)
 
uint64_t qb_hdb_nocheck_convert (uint32_t handle)
 

Detailed Description

The handle database is for reference counting objects.

Note
Historically, handle database implementation also served internal needs of libqb (e.g. for IPC services tracking), which was eventually replaced with indirection-less reference counters and their direct modifications.

Macro Definition Documentation

#define _GNU_SOURCE
#define QB_HDB_D_FORMAT   "%" PRIu64
#define QB_HDB_DECLARE (   database_name,
  destructor_function 
)
Value:
static struct qb_hdb (database_name) = { \
.handle_count = 0, \
.handles = NULL, \
.iterator = 0, \
.destructor = destructor_function, \
.first_run = QB_TRUE \
}; \
#define QB_TRUE
Definition: qbdefs.h:48

Convience macro for declaring a file scoped handle database.

QB_HDB_DECLARE(my_handle_database, NULL);
#define QB_HDB_X_FORMAT   "%" PRIx64

Typedef Documentation

typedef uint64_t qb_handle_t

Generic handle type is 64 bits.

Function Documentation

uint32_t qb_hdb_base_convert ( qb_handle_t  handle)
void qb_hdb_create ( struct qb_hdb hdb)

Create a new database.

Parameters
hdbthe database to init.
void qb_hdb_destroy ( struct qb_hdb hdb)

Destroy a handle database.

Parameters
hdbthe database to destroy.
int32_t qb_hdb_handle_create ( struct qb_hdb hdb,
int32_t  instance_size,
qb_handle_t handle_id_out 
)

Create a new handle.

Parameters
hdbthe database instance
instance_sizesize of the object to malloc
handle_id_outnew handle
Returns
(0 == ok, -errno failure)
int32_t qb_hdb_handle_destroy ( struct qb_hdb hdb,
qb_handle_t  handle_in 
)

Request the destruction of the object.

When the refcount is 0, it will be destroyed.

Parameters
handle_inthe handle
hdbthe database instance
Returns
(0 == ok, -errno failure)
int32_t qb_hdb_handle_get ( struct qb_hdb hdb,
qb_handle_t  handle_in,
void **  instance 
)

Get the instance associated with this handle and increase it's refcount.

Parameters
handle_inthe handle
hdbthe database instance
instance(out) pointer to the desired object.
Returns
(0 == ok, -errno failure)
int32_t qb_hdb_handle_get_always ( struct qb_hdb hdb,
qb_handle_t  handle_in,
void **  instance 
)

Get the instance associated with this handle and increase it's refcount.

Parameters
handle_inthe handle
hdbthe database instance
instance(out) pointer to the desired object.
Returns
(0 == ok, -errno failure)
Note
This is currently an alias to qb_hdb_handle_get.
int32_t qb_hdb_handle_put ( struct qb_hdb hdb,
qb_handle_t  handle_in 
)

Put the instance associated with this handle and decrease it's refcount.

Parameters
handle_inthe handle
hdbthe database instance
Returns
(0 == ok, -errno failure)
int32_t qb_hdb_handle_refcount_get ( struct qb_hdb hdb,
qb_handle_t  handle_in 
)

Get the current refcount.

Parameters
handle_inthe handle
hdbthe database instance
Returns
(>= 0 is the refcount, -errno failure)
int32_t qb_hdb_iterator_next ( struct qb_hdb hdb,
void **  instance,
qb_handle_t handle 
)

Get the next object and increament it's refcount.

Remember to call qb_hdb_handle_put()

Parameters
hdbthe database instance
handle(out) the handle
instance(out) pointer to the desired object.
Returns
(0 == ok, -errno failure)
void qb_hdb_iterator_reset ( struct qb_hdb hdb)

Reset the iterator.

Parameters
hdbthe database instance
uint64_t qb_hdb_nocheck_convert ( uint32_t  handle)