#ifndef HB_OBJECT_HH
#define HB_OBJECT_HH
#include "hb.hh"
#include "hb-atomic.hh"
#include "hb-mutex.hh"
#include "hb-vector.hh"
template <typename item_t, typename lock_t>
struct hb_lockable_set_t
{ … };
struct hb_reference_count_t
{ … };
struct hb_user_data_array_t
{ … };
struct hb_object_header_t
{ … };
#define HB_OBJECT_HEADER_STATIC …
template <typename Type>
static inline void hb_object_trace (const Type *obj, const char *function)
{ … }
template <typename Type, typename ...Ts>
static inline Type *hb_object_create (Ts... ds)
{ … }
template <typename Type>
static inline void hb_object_init (Type *obj)
{ … }
template <typename Type>
static inline bool hb_object_is_valid (const Type *obj)
{ … }
template <typename Type>
static inline bool hb_object_is_immutable (const Type *obj)
{ … }
template <typename Type>
static inline void hb_object_make_immutable (const Type *obj)
{ … }
template <typename Type>
static inline Type *hb_object_reference (Type *obj)
{ … }
template <typename Type>
static inline bool hb_object_destroy (Type *obj)
{ … }
template <typename Type>
static inline void hb_object_fini (Type *obj)
{ … }
template <typename Type>
static inline bool hb_object_set_user_data (Type *obj,
hb_user_data_key_t *key,
void * data,
hb_destroy_func_t destroy,
hb_bool_t replace)
{ … }
template <typename Type>
static inline void *hb_object_get_user_data (Type *obj,
hb_user_data_key_t *key)
{ … }
#endif