#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_t * | pn_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_t * | pn_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_t * | pn_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_t * | pn_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_t * | pn_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_t * | pn_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_t * | pn_string (const char *bytes) |
PN_EXTERN pn_string_t * | pn_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_t * | pn_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_t * | pn_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 PN_CLASS | ( | PREFIX | ) |
{ \ #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 | ) |
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 | ) |
{ \ #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 struct pn_class_t pn_class_t |
typedef void* pn_handle_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 |
typedef intptr_t pn_shandle_t |
typedef struct pn_string_t pn_string_t |
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 | |||
) |
PN_EXTERN const pn_class_t PN_OBJECT[] |
PN_EXTERN const pn_class_t PN_VOID[] |
PN_EXTERN const pn_class_t PN_WEAKREF[] |