/builddir/build/BUILD/qpid-proton-0.14.0/proton-c/include/proton/object.h File Reference

#include <proton/cid.h>
#include <proton/types.h>
#include <stdarg.h>
#include <proton/type_compat.h>
#include <stddef.h>
#include <proton/import_export.h>

Go to the source code of this file.

Data Structures

struct  pn_class_t

Defines

#define PROTON_OBJECT_H   1
#define PN_CLASSDEF(PREFIX)
#define PN_CLASS(PREFIX)
#define PN_METACLASS(PREFIX)
#define PN_REFCOUNT   (0x1)
#define PN_REFCOUNT_KEY   (0x2)
#define PN_REFCOUNT_VALUE   (0x4)
#define PN_LEGCTX   ((pn_handle_t) 0)
#define PN_HANDLE(name)
 PN_HANDLE is a trick to define a unique identifier by using the address of a static variable.

Typedefs

typedef void * pn_handle_t
typedef intptr_t pn_shandle_t
typedef struct pn_class_t pn_class_t
typedef struct pn_string_t pn_string_t
typedef struct pn_list_t pn_list_t
typedef struct pn_map_t pn_map_t
typedef struct pn_hash_t pn_hash_t
typedef void *(* pn_iterator_next_t )(void *state)
typedef struct pn_iterator_t pn_iterator_t
typedef struct pn_record_t pn_record_t

Functions

PN_EXTERN pn_cid_t pn_class_id (const pn_class_t *clazz)
PN_EXTERN const char * pn_class_name (const pn_class_t *clazz)
PN_EXTERN void * pn_class_new (const pn_class_t *clazz, size_t size)
PN_EXTERN void * pn_class_incref (const pn_class_t *clazz, void *object)
PN_EXTERN int pn_class_refcount (const pn_class_t *clazz, void *object)
PN_EXTERN int pn_class_decref (const pn_class_t *clazz, void *object)
PN_EXTERN void pn_class_free (const pn_class_t *clazz, void *object)
PN_EXTERN const pn_class_tpn_class_reify (const pn_class_t *clazz, void *object)
PN_EXTERN uintptr_t pn_class_hashcode (const pn_class_t *clazz, void *object)
PN_EXTERN intptr_t pn_class_compare (const pn_class_t *clazz, void *a, void *b)
PN_EXTERN bool pn_class_equals (const pn_class_t *clazz, void *a, void *b)
PN_EXTERN int pn_class_inspect (const pn_class_t *clazz, void *object, pn_string_t *dst)
PN_EXTERN uintptr_t pn_void_hashcode (void *object)
PN_EXTERN intptr_t pn_void_compare (void *a, void *b)
PN_EXTERN int pn_void_inspect (void *object, pn_string_t *dst)
PN_EXTERN void * pn_object_new (const pn_class_t *clazz, size_t size)
PN_EXTERN const pn_class_tpn_object_reify (void *object)
PN_EXTERN void pn_object_incref (void *object)
PN_EXTERN int pn_object_refcount (void *object)
PN_EXTERN void pn_object_decref (void *object)
PN_EXTERN void pn_object_free (void *object)
PN_EXTERN void * pn_incref (void *object)
PN_EXTERN int pn_decref (void *object)
PN_EXTERN int pn_refcount (void *object)
PN_EXTERN void pn_free (void *object)
PN_EXTERN const pn_class_tpn_class (void *object)
PN_EXTERN uintptr_t pn_hashcode (void *object)
PN_EXTERN intptr_t pn_compare (void *a, void *b)
PN_EXTERN bool pn_equals (void *a, void *b)
PN_EXTERN int pn_inspect (void *object, pn_string_t *dst)
PN_EXTERN pn_list_tpn_list (const pn_class_t *clazz, size_t capacity)
PN_EXTERN size_t pn_list_size (pn_list_t *list)
PN_EXTERN void * pn_list_get (pn_list_t *list, int index)
PN_EXTERN void pn_list_set (pn_list_t *list, int index, void *value)
PN_EXTERN int pn_list_add (pn_list_t *list, void *value)
PN_EXTERN void * pn_list_pop (pn_list_t *list)
PN_EXTERN ssize_t pn_list_index (pn_list_t *list, void *value)
PN_EXTERN bool pn_list_remove (pn_list_t *list, void *value)
PN_EXTERN void pn_list_del (pn_list_t *list, int index, int n)
PN_EXTERN void pn_list_clear (pn_list_t *list)
PN_EXTERN void pn_list_iterator (pn_list_t *list, pn_iterator_t *iter)
PN_EXTERN void pn_list_minpush (pn_list_t *list, void *value)
PN_EXTERN void * pn_list_minpop (pn_list_t *list)
PN_EXTERN pn_map_tpn_map (const pn_class_t *key, const pn_class_t *value, size_t capacity, float load_factor)
PN_EXTERN size_t pn_map_size (pn_map_t *map)
PN_EXTERN int pn_map_put (pn_map_t *map, void *key, void *value)
PN_EXTERN void * pn_map_get (pn_map_t *map, void *key)
PN_EXTERN void pn_map_del (pn_map_t *map, void *key)
PN_EXTERN pn_handle_t pn_map_head (pn_map_t *map)
PN_EXTERN pn_handle_t pn_map_next (pn_map_t *map, pn_handle_t entry)
PN_EXTERN void * pn_map_key (pn_map_t *map, pn_handle_t entry)
PN_EXTERN void * pn_map_value (pn_map_t *map, pn_handle_t entry)
PN_EXTERN pn_hash_tpn_hash (const pn_class_t *clazz, size_t capacity, float load_factor)
PN_EXTERN size_t pn_hash_size (pn_hash_t *hash)
PN_EXTERN int pn_hash_put (pn_hash_t *hash, uintptr_t key, void *value)
PN_EXTERN void * pn_hash_get (pn_hash_t *hash, uintptr_t key)
PN_EXTERN void pn_hash_del (pn_hash_t *hash, uintptr_t key)
PN_EXTERN pn_handle_t pn_hash_head (pn_hash_t *hash)
PN_EXTERN pn_handle_t pn_hash_next (pn_hash_t *hash, pn_handle_t entry)
PN_EXTERN uintptr_t pn_hash_key (pn_hash_t *hash, pn_handle_t entry)
PN_EXTERN void * pn_hash_value (pn_hash_t *hash, pn_handle_t entry)
PN_EXTERN pn_string_tpn_string (const char *bytes)
PN_EXTERN pn_string_tpn_stringn (const char *bytes, size_t n)
PN_EXTERN const char * pn_string_get (pn_string_t *string)
PN_EXTERN size_t pn_string_size (pn_string_t *string)
PN_EXTERN int pn_string_set (pn_string_t *string, const char *bytes)
PN_EXTERN int pn_string_setn (pn_string_t *string, const char *bytes, size_t n)
PN_EXTERN ssize_t pn_string_put (pn_string_t *string, char *dst)
PN_EXTERN void pn_string_clear (pn_string_t *string)
PN_EXTERN int pn_string_format (pn_string_t *string, const char *format,...)
PN_EXTERN int pn_string_vformat (pn_string_t *string, const char *format, va_list ap)
PN_EXTERN int pn_string_addf (pn_string_t *string, const char *format,...)
PN_EXTERN int pn_string_vaddf (pn_string_t *string, const char *format, va_list ap)
PN_EXTERN int pn_string_grow (pn_string_t *string, size_t capacity)
PN_EXTERN char * pn_string_buffer (pn_string_t *string)
PN_EXTERN size_t pn_string_capacity (pn_string_t *string)
PN_EXTERN int pn_string_resize (pn_string_t *string, size_t size)
PN_EXTERN int pn_string_copy (pn_string_t *string, pn_string_t *src)
PN_EXTERN pn_iterator_tpn_iterator (void)
PN_EXTERN void * pn_iterator_start (pn_iterator_t *iterator, pn_iterator_next_t next, size_t size)
PN_EXTERN void * pn_iterator_next (pn_iterator_t *iterator)
PN_EXTERN pn_record_tpn_record (void)
PN_EXTERN void pn_record_def (pn_record_t *record, pn_handle_t key, const pn_class_t *clazz)
PN_EXTERN bool pn_record_has (pn_record_t *record, pn_handle_t key)
PN_EXTERN void * pn_record_get (pn_record_t *record, pn_handle_t key)
PN_EXTERN void pn_record_set (pn_record_t *record, pn_handle_t key, void *value)
PN_EXTERN void pn_record_clear (pn_record_t *record)

Variables

PN_EXTERN const pn_class_t PN_OBJECT []
PN_EXTERN const pn_class_t PN_VOID []
PN_EXTERN const pn_class_t PN_WEAKREF []

Define Documentation

#define PN_CLASS ( PREFIX   ) 
Value:
{                      \
    #PREFIX,                                    \
    CID_ ## PREFIX,                             \
    pn_object_new,                              \
    PREFIX ## _initialize,                      \
    pn_object_incref,                           \
    pn_object_decref,                           \
    pn_object_refcount,                         \
    PREFIX ## _finalize,                        \
    pn_object_free,                             \
    pn_object_reify,                            \
    PREFIX ## _hashcode,                        \
    PREFIX ## _compare,                         \
    PREFIX ## _inspect                          \
}
#define PN_CLASSDEF ( PREFIX   ) 
#define PN_HANDLE ( name   ) 
Value:
static const char _PN_HANDLE_ ## name = 0; \
  static const pn_handle_t name = ((pn_handle_t) &_PN_HANDLE_ ## name);

PN_HANDLE is a trick to define a unique identifier by using the address of a static variable.

You MUST NOT use it in a .h file, since it must be defined uniquely in one compilation unit. Your .h file can provide access to the handle (if needed) via a function. For example:

/ my_thing.h pn_handle_t get_my_thing(void);

/ my_thing.c PN_HANDLE(MY_THING); pn_handle_t get_my_thing(void) { return MY_THING; }

Note that the name "MY_THING" is not exported and is not required to be unique except in the .c file. The linker will guarantee that the *address* of MY_THING, as returned by get_my_thing() *is* unique across the entire linked executable.

#define PN_LEGCTX   ((pn_handle_t) 0)
#define PN_METACLASS ( PREFIX   ) 
Value:
{                  \
    #PREFIX,                                    \
    CID_ ## PREFIX,                             \
    PREFIX ## _new,                             \
    PREFIX ## _initialize,                      \
    PREFIX ## _incref,                          \
    PREFIX ## _decref,                          \
    PREFIX ## _refcount,                        \
    PREFIX ## _finalize,                        \
    PREFIX ## _free,                            \
    PREFIX ## _reify,                           \
    PREFIX ## _hashcode,                        \
    PREFIX ## _compare,                         \
    PREFIX ## _inspect                          \
}
#define PN_REFCOUNT   (0x1)
#define PN_REFCOUNT_KEY   (0x2)
#define PN_REFCOUNT_VALUE   (0x4)
#define PROTON_OBJECT_H   1

Typedef Documentation

typedef struct pn_class_t pn_class_t
typedef void* pn_handle_t
typedef struct pn_hash_t pn_hash_t
typedef void*(* pn_iterator_next_t)(void *state)
typedef struct pn_iterator_t pn_iterator_t
typedef struct pn_list_t pn_list_t
typedef struct pn_map_t pn_map_t
typedef struct pn_record_t pn_record_t
typedef intptr_t pn_shandle_t
typedef struct pn_string_t pn_string_t

Function Documentation

PN_EXTERN const pn_class_t* pn_class ( void *  object  ) 
PN_EXTERN intptr_t pn_class_compare ( const pn_class_t clazz,
void *  a,
void *  b 
)
PN_EXTERN int pn_class_decref ( const pn_class_t clazz,
void *  object 
)
PN_EXTERN bool pn_class_equals ( const pn_class_t clazz,
void *  a,
void *  b 
)
PN_EXTERN void pn_class_free ( const pn_class_t clazz,
void *  object 
)
PN_EXTERN uintptr_t pn_class_hashcode ( const pn_class_t clazz,
void *  object 
)
PN_EXTERN pn_cid_t pn_class_id ( const pn_class_t clazz  ) 
PN_EXTERN void* pn_class_incref ( const pn_class_t clazz,
void *  object 
)
PN_EXTERN int pn_class_inspect ( const pn_class_t clazz,
void *  object,
pn_string_t dst 
)
PN_EXTERN const char* pn_class_name ( const pn_class_t clazz  ) 
PN_EXTERN void* pn_class_new ( const pn_class_t clazz,
size_t  size 
)
PN_EXTERN int pn_class_refcount ( const pn_class_t clazz,
void *  object 
)
PN_EXTERN const pn_class_t* pn_class_reify ( const pn_class_t clazz,
void *  object 
)
PN_EXTERN intptr_t pn_compare ( void *  a,
void *  b 
)
PN_EXTERN int pn_decref ( void *  object  ) 
PN_EXTERN bool pn_equals ( void *  a,
void *  b 
)
PN_EXTERN void pn_free ( void *  object  ) 
PN_EXTERN pn_hash_t* pn_hash ( const pn_class_t clazz,
size_t  capacity,
float  load_factor 
)
PN_EXTERN void pn_hash_del ( pn_hash_t hash,
uintptr_t  key 
)
PN_EXTERN void* pn_hash_get ( pn_hash_t hash,
uintptr_t  key 
)
PN_EXTERN pn_handle_t pn_hash_head ( pn_hash_t hash  ) 
PN_EXTERN uintptr_t pn_hash_key ( pn_hash_t hash,
pn_handle_t  entry 
)
PN_EXTERN pn_handle_t pn_hash_next ( pn_hash_t hash,
pn_handle_t  entry 
)
PN_EXTERN int pn_hash_put ( pn_hash_t hash,
uintptr_t  key,
void *  value 
)
PN_EXTERN size_t pn_hash_size ( pn_hash_t hash  ) 
PN_EXTERN void* pn_hash_value ( pn_hash_t hash,
pn_handle_t  entry 
)
PN_EXTERN uintptr_t pn_hashcode ( void *  object  ) 
PN_EXTERN void* pn_incref ( void *  object  ) 
PN_EXTERN int pn_inspect ( void *  object,
pn_string_t dst 
)
PN_EXTERN pn_iterator_t* pn_iterator ( void   ) 
PN_EXTERN void* pn_iterator_next ( pn_iterator_t iterator  ) 
PN_EXTERN void* pn_iterator_start ( pn_iterator_t iterator,
pn_iterator_next_t  next,
size_t  size 
)
PN_EXTERN pn_list_t* pn_list ( const pn_class_t clazz,
size_t  capacity 
)
PN_EXTERN int pn_list_add ( pn_list_t list,
void *  value 
)
PN_EXTERN void pn_list_clear ( pn_list_t list  ) 
PN_EXTERN void pn_list_del ( pn_list_t list,
int  index,
int  n 
)
PN_EXTERN void* pn_list_get ( pn_list_t list,
int  index 
)
PN_EXTERN ssize_t pn_list_index ( pn_list_t list,
void *  value 
)
PN_EXTERN void pn_list_iterator ( pn_list_t list,
pn_iterator_t iter 
)
PN_EXTERN void* pn_list_minpop ( pn_list_t list  ) 
PN_EXTERN void pn_list_minpush ( pn_list_t list,
void *  value 
)
PN_EXTERN void* pn_list_pop ( pn_list_t list  ) 
PN_EXTERN bool pn_list_remove ( pn_list_t list,
void *  value 
)
PN_EXTERN void pn_list_set ( pn_list_t list,
int  index,
void *  value 
)
PN_EXTERN size_t pn_list_size ( pn_list_t list  ) 
PN_EXTERN pn_map_t* pn_map ( const pn_class_t key,
const pn_class_t value,
size_t  capacity,
float  load_factor 
)
PN_EXTERN void pn_map_del ( pn_map_t map,
void *  key 
)
PN_EXTERN void* pn_map_get ( pn_map_t map,
void *  key 
)
PN_EXTERN pn_handle_t pn_map_head ( pn_map_t map  ) 
PN_EXTERN void* pn_map_key ( pn_map_t map,
pn_handle_t  entry 
)
PN_EXTERN pn_handle_t pn_map_next ( pn_map_t map,
pn_handle_t  entry 
)
PN_EXTERN int pn_map_put ( pn_map_t map,
void *  key,
void *  value 
)
PN_EXTERN size_t pn_map_size ( pn_map_t map  ) 
PN_EXTERN void* pn_map_value ( pn_map_t map,
pn_handle_t  entry 
)
PN_EXTERN void pn_object_decref ( void *  object  ) 
PN_EXTERN void pn_object_free ( void *  object  ) 
PN_EXTERN void pn_object_incref ( void *  object  ) 
PN_EXTERN void* pn_object_new ( const pn_class_t clazz,
size_t  size 
)
PN_EXTERN int pn_object_refcount ( void *  object  ) 
PN_EXTERN const pn_class_t* pn_object_reify ( void *  object  ) 
PN_EXTERN pn_record_t* pn_record ( void   ) 
PN_EXTERN void pn_record_clear ( pn_record_t record  ) 
PN_EXTERN void pn_record_def ( pn_record_t record,
pn_handle_t  key,
const pn_class_t clazz 
)
PN_EXTERN void* pn_record_get ( pn_record_t record,
pn_handle_t  key 
)
PN_EXTERN bool pn_record_has ( pn_record_t record,
pn_handle_t  key 
)
PN_EXTERN void pn_record_set ( pn_record_t record,
pn_handle_t  key,
void *  value 
)
PN_EXTERN int pn_refcount ( void *  object  ) 
PN_EXTERN pn_string_t* pn_string ( const char *  bytes  ) 
PN_EXTERN int pn_string_addf ( pn_string_t string,
const char *  format,
  ... 
)
PN_EXTERN char* pn_string_buffer ( pn_string_t string  ) 
PN_EXTERN size_t pn_string_capacity ( pn_string_t string  ) 
PN_EXTERN void pn_string_clear ( pn_string_t string  ) 
PN_EXTERN int pn_string_copy ( pn_string_t string,
pn_string_t src 
)
PN_EXTERN int pn_string_format ( pn_string_t string,
const char *  format,
  ... 
)
PN_EXTERN const char* pn_string_get ( pn_string_t string  ) 
PN_EXTERN int pn_string_grow ( pn_string_t string,
size_t  capacity 
)
PN_EXTERN ssize_t pn_string_put ( pn_string_t string,
char *  dst 
)
PN_EXTERN int pn_string_resize ( pn_string_t string,
size_t  size 
)
PN_EXTERN int pn_string_set ( pn_string_t string,
const char *  bytes 
)
PN_EXTERN int pn_string_setn ( pn_string_t string,
const char *  bytes,
size_t  n 
)
PN_EXTERN size_t pn_string_size ( pn_string_t string  ) 
PN_EXTERN int pn_string_vaddf ( pn_string_t string,
const char *  format,
va_list  ap 
)
PN_EXTERN int pn_string_vformat ( pn_string_t string,
const char *  format,
va_list  ap 
)
PN_EXTERN pn_string_t* pn_stringn ( const char *  bytes,
size_t  n 
)
PN_EXTERN intptr_t pn_void_compare ( void *  a,
void *  b 
)
PN_EXTERN uintptr_t pn_void_hashcode ( void *  object  ) 
PN_EXTERN int pn_void_inspect ( void *  object,
pn_string_t dst 
)

Variable Documentation

PN_EXTERN const pn_class_t PN_OBJECT[]
PN_EXTERN const pn_class_t PN_VOID[]
PN_EXTERN const pn_class_t PN_WEAKREF[]
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on 23 Sep 2016 for proton by  doxygen 1.6.1