This is an automated email from the ASF dual-hosted git repository. astitcher pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 5ebd13fe8b29566eac7fdc07e824c87262b3a443 Author: Andrew Stitcher <[email protected]> AuthorDate: Wed Apr 13 14:39:53 2022 -0400 PROTON-2559: making object.h mostly private --- c/include/proton/object.h | 220 +++------------------ c/include/proton/reactor.h | 3 +- c/src/core/buffer.h | 3 +- c/src/core/event.c | 7 +- c/src/core/memory.h | 2 +- c/src/core/object/object.c | 6 +- .../proton/object.h => src/core/object_private.h} | 152 +++++--------- c/src/core/value_dump.h | 2 + c/src/handlers/handshaker.c | 6 +- c/src/handlers/iohandler.c | 7 +- c/src/messenger/subscription.c | 6 +- c/src/messenger/subscription.h | 2 + c/src/reactor/acceptor.c | 2 + c/src/reactor/connection.c | 10 +- c/src/reactor/handler.c | 4 +- c/src/reactor/io/posix/io.c | 5 +- c/src/reactor/io/windows/iocp.h | 3 +- c/src/reactor/reactor.c | 2 +- c/src/reactor/selectable.c | 2 +- c/src/reactor/selectable.h | 2 + c/src/reactor/timer.c | 4 +- c/tests/event_test.cpp | 5 +- c/tests/object_test.cpp | 5 +- c/tools/reactor-recv.c | 1 + python/cproton.i | 2 +- ruby/cproton.i | 1 + 26 files changed, 135 insertions(+), 329 deletions(-) diff --git a/c/include/proton/object.h b/c/include/proton/object.h index 771c692c3..a97d01f16 100644 --- a/c/include/proton/object.h +++ b/c/include/proton/object.h @@ -24,9 +24,6 @@ #include <proton/cid.h> #include <proton/types.h> -#include <stdarg.h> -#include <proton/type_compat.h> -#include <stddef.h> #include <proton/import_export.h> #ifdef __cplusplus @@ -36,72 +33,6 @@ extern "C" { /** * @cond INTERNAL */ - -typedef intptr_t pn_shandle_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; - -struct pn_class_t { - const char *name; - pn_cid_t cid; - void *(*newinst)(const pn_class_t *, size_t); - void (*initialize)(void *); - void (*incref)(void *); - void (*decref)(void *); - int (*refcount)(void *); - void (*finalize)(void *); - void (*free)(void *); - uintptr_t (*hashcode)(void *); - intptr_t (*compare)(void *, void *); - int (*inspect)(void *, pn_string_t *); -}; - -/* Hack alert: Declare these as arrays so we can treat the name of the single - object as the address */ -PN_EXTERN extern const pn_class_t PN_DEFAULT[]; -PN_EXTERN extern const pn_class_t PN_OBJECT[]; -PN_EXTERN extern const pn_class_t PN_VOID[]; -PN_EXTERN extern const pn_class_t PN_WEAKREF[]; - -PN_EXTERN void pn_object_incref(void *object); - -#define PN_CLASSCLASS(PREFIX) PREFIX ## __class - -#define PN_CLASS(PREFIX) { \ - #PREFIX, \ - CID_ ## PREFIX, \ - NULL, \ - PREFIX ## _initialize, \ - NULL, \ - NULL, \ - NULL, \ - PREFIX ## _finalize, \ - NULL, \ - PREFIX ## _hashcode, \ - PREFIX ## _compare, \ - PREFIX ## _inspect \ -} - -#define PN_METACLASS(PREFIX) { \ - #PREFIX, \ - CID_ ## PREFIX, \ - PREFIX ## _new, \ - PREFIX ## _initialize, \ - PREFIX ## _incref, \ - PREFIX ## _decref, \ - PREFIX ## _refcount, \ - PREFIX ## _finalize, \ - PREFIX ## _free, \ - PREFIX ## _hashcode, \ - PREFIX ## _compare, \ - PREFIX ## _inspect \ -} - PN_EXTERN pn_class_t *pn_class_create(const char *name, void (*initialize)(void*), void (*finalize)(void*), @@ -109,147 +40,42 @@ PN_EXTERN pn_class_t *pn_class_create(const char *name, void (*decref)(void*), int (*refcount)(void*)); -PN_EXTERN void *pn_void_new(const pn_class_t *clazz, size_t size); -PN_EXTERN void pn_void_incref(void *object); -PN_EXTERN void pn_void_decref(void *object); -PN_EXTERN int pn_void_refcount(void *object); - -/* Class to identify a plain C struct in a pn_event_t. No refcounting or memory management. */ -#define PN_STRUCT_CLASSDEF(PREFIX) \ -const pn_class_t PN_CLASSCLASS(PREFIX)[] = {{ \ - #PREFIX, \ - CID_ ## PREFIX, \ - NULL, /*_new*/ \ - NULL, /*_initialize*/ \ - pn_void_incref, \ - pn_void_decref, \ - pn_void_refcount, \ - NULL, /* _finalize */ \ - NULL, /* _free */ \ - NULL, /* _hashcode */ \ - NULL, /* _compare */ \ - NULL, /* _inspect */ \ -}}; \ - -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 const char *pn_class_name(const pn_class_t *clazz); +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_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 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_incref, pn_decref and pn_refcount are for internal use by the proton - * library, the should not be called by application code. Application code - * should use the appropriate pn_*_free function (pn_link_free, pn_session_free - * etc.) when it is finished with a proton value. Proton values should only be - * used when handling a pn_event_t that refers to them. - */ +PN_EXTERN const pn_class_t *pn_class(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 char *pn_tostring(void *object); -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, ...) -#ifdef __GNUC__ - __attribute__ ((format (printf, 2, 3))) -#endif - ; -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, ...) -#ifdef __GNUC__ - __attribute__ ((format (printf, 2, 3))) -#endif - ; -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); - #define PN_LEGCTX ((pn_handle_t) 0) /** - 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. + * 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_HANDLE(name) \ - static const char _PN_HANDLE_ ## name = 0; \ - static const pn_handle_t name = ((pn_handle_t) &_PN_HANDLE_ ## name); +static const char _PN_HANDLE_ ## name = 0; \ +static const pn_handle_t name = ((pn_handle_t) &_PN_HANDLE_ ## name); + +PN_EXTERN extern const pn_class_t *PN_OBJECT; +PN_EXTERN extern const pn_class_t *PN_VOID; 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); diff --git a/c/include/proton/reactor.h b/c/include/proton/reactor.h index fc96fa9e7..4fcd1997a 100644 --- a/c/include/proton/reactor.h +++ b/c/include/proton/reactor.h @@ -42,6 +42,7 @@ typedef struct pn_reactor_t pn_reactor_t; typedef struct pn_acceptor_t pn_acceptor_t; typedef struct pn_timer_t pn_timer_t; typedef struct pn_task_t pn_task_t; +struct pn_list_t; PNX_EXTERN pn_handler_t *pn_handler(void (*dispatch)(pn_handler_t *, pn_event_t *, pn_event_type_t)); PNX_EXTERN pn_handler_t *pn_handler_new(void (*dispatch)(pn_handler_t *, pn_event_t *, pn_event_type_t), size_t size, @@ -65,7 +66,7 @@ PNX_EXTERN pn_handler_t *pn_reactor_get_global_handler(pn_reactor_t *reactor); PNX_EXTERN void pn_reactor_set_global_handler(pn_reactor_t *reactor, pn_handler_t *handler); PNX_EXTERN pn_handler_t *pn_reactor_get_handler(pn_reactor_t *reactor); PNX_EXTERN void pn_reactor_set_handler(pn_reactor_t *reactor, pn_handler_t *handler); -PNX_EXTERN pn_list_t *pn_reactor_children(pn_reactor_t *reactor); +PNX_EXTERN struct pn_list_t *pn_reactor_children(pn_reactor_t *reactor); PNX_EXTERN pn_selectable_t *pn_reactor_selectable(pn_reactor_t *reactor); PNX_EXTERN void pn_reactor_update(pn_reactor_t *reactor, pn_selectable_t *selectable); PNX_EXTERN pn_acceptor_t *pn_reactor_acceptor(pn_reactor_t *reactor, const char *host, const char *port, diff --git a/c/src/core/buffer.h b/c/src/core/buffer.h index b9bd7573d..0b3f8fa77 100644 --- a/c/src/core/buffer.h +++ b/c/src/core/buffer.h @@ -23,9 +23,10 @@ */ #include <proton/import_export.h> -#include <proton/object.h> #include <proton/types.h> +#include "core/object_private.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/c/src/core/event.c b/c/src/core/event.c index 3f81f7075..13eefdd41 100644 --- a/c/src/core/event.c +++ b/c/src/core/event.c @@ -18,11 +18,14 @@ * under the License. * */ -#include <stdio.h> + #include <proton/object.h> #include <proton/event.h> -#include <proton/reactor.h> + +#include "core/object_private.h" + #include <assert.h> +#include <stdio.h> struct pn_collector_t { pn_list_t *pool; diff --git a/c/src/core/memory.h b/c/src/core/memory.h index 23a448ad3..d9818fc22 100644 --- a/c/src/core/memory.h +++ b/c/src/core/memory.h @@ -22,7 +22,7 @@ * */ -#include <proton/object.h> +#include "core/object_private.h" #include <stddef.h> diff --git a/c/src/core/object/object.c b/c/src/core/object/object.c index e498f9fb0..2b2eadf23 100644 --- a/c/src/core/object/object.c +++ b/c/src/core/object/object.c @@ -49,7 +49,8 @@ int pn_void_refcount(void *object) { return -1; } #define pn_void_compare NULL #define pn_void_inspect NULL -const pn_class_t PN_VOID[] = {PN_METACLASS(pn_void)}; +static const pn_class_t PN_VOID_S = PN_METACLASS(pn_void); +const pn_class_t *PN_VOID = &PN_VOID_S; typedef struct { const pn_class_t *clazz; @@ -461,4 +462,5 @@ int pn_strongref_refcount(void *object) #define pn_strongref_compare pn_compare #define pn_strongref_inspect pn_inspect -const pn_class_t PN_OBJECT[] = {PN_METACLASS(pn_strongref)}; +static const pn_class_t PN_OBJECT_S = PN_METACLASS(pn_strongref); +const pn_class_t *PN_OBJECT = &PN_OBJECT_S; diff --git a/c/include/proton/object.h b/c/src/core/object_private.h similarity index 64% copy from c/include/proton/object.h copy to c/src/core/object_private.h index 771c692c3..9b277c28a 100644 --- a/c/include/proton/object.h +++ b/c/src/core/object_private.h @@ -1,5 +1,5 @@ -#ifndef PROTON_OBJECT_H -#define PROTON_OBJECT_H 1 +#ifndef PROTON_OBJECT_PRIVATE_H +#define PROTON_OBJECT_PRIVATE_H 1 /* * @@ -22,7 +22,8 @@ * */ -#include <proton/cid.h> +#include "proton/object.h" + #include <proton/types.h> #include <stdarg.h> #include <proton/type_compat.h> @@ -39,39 +40,28 @@ extern "C" { typedef intptr_t pn_shandle_t; -typedef struct pn_string_t pn_string_t; typedef struct pn_list_t pn_list_t; +typedef struct pn_string_t pn_string_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; struct pn_class_t { - const char *name; - pn_cid_t cid; - void *(*newinst)(const pn_class_t *, size_t); - void (*initialize)(void *); - void (*incref)(void *); - void (*decref)(void *); - int (*refcount)(void *); - void (*finalize)(void *); - void (*free)(void *); - uintptr_t (*hashcode)(void *); - intptr_t (*compare)(void *, void *); - int (*inspect)(void *, pn_string_t *); + const char *name; + pn_cid_t cid; + void *(*newinst)(const pn_class_t *, size_t); + void (*initialize)(void *); + void (*incref)(void *); + void (*decref)(void *); + int (*refcount)(void *); + void (*finalize)(void *); + void (*free)(void *); + uintptr_t (*hashcode)(void *); + intptr_t (*compare)(void *, void *); + int (*inspect)(void *, pn_string_t *); }; -/* Hack alert: Declare these as arrays so we can treat the name of the single - object as the address */ -PN_EXTERN extern const pn_class_t PN_DEFAULT[]; -PN_EXTERN extern const pn_class_t PN_OBJECT[]; -PN_EXTERN extern const pn_class_t PN_VOID[]; -PN_EXTERN extern const pn_class_t PN_WEAKREF[]; - -PN_EXTERN void pn_object_incref(void *object); - -#define PN_CLASSCLASS(PREFIX) PREFIX ## __class - #define PN_CLASS(PREFIX) { \ #PREFIX, \ CID_ ## PREFIX, \ @@ -102,17 +92,12 @@ PN_EXTERN void pn_object_incref(void *object); PREFIX ## _inspect \ } -PN_EXTERN pn_class_t *pn_class_create(const char *name, - void (*initialize)(void*), - void (*finalize)(void*), - void (*incref)(void*), - void (*decref)(void*), - int (*refcount)(void*)); +/* Hack alert: Declare these as arrays so we can treat the name of the single + object as the address */ +PN_EXTERN extern const pn_class_t PN_DEFAULT[]; +PN_EXTERN extern const pn_class_t PN_WEAKREF[]; -PN_EXTERN void *pn_void_new(const pn_class_t *clazz, size_t size); -PN_EXTERN void pn_void_incref(void *object); -PN_EXTERN void pn_void_decref(void *object); -PN_EXTERN int pn_void_refcount(void *object); +#define PN_CLASSCLASS(PREFIX) PREFIX ## __class /* Class to identify a plain C struct in a pn_event_t. No refcounting or memory management. */ #define PN_STRUCT_CLASSDEF(PREFIX) \ @@ -131,10 +116,6 @@ const pn_class_t PN_CLASSCLASS(PREFIX)[] = {{ \ NULL, /* _inspect */ \ }}; \ -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); @@ -145,34 +126,29 @@ 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_incref, pn_decref and pn_refcount are for internal use by the proton - * library, the should not be called by application code. Application code - * should use the appropriate pn_*_free function (pn_link_free, pn_session_free - * etc.) when it is finished with a proton value. Proton values should only be - * used when handling a pn_event_t that refers to them. - */ -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 void pn_object_incref(void *object); + +PN_EXTERN void *pn_void_new(const pn_class_t *clazz, size_t size); +PN_EXTERN void pn_void_incref(void *object); +PN_EXTERN void pn_void_decref(void *object); +PN_EXTERN int pn_void_refcount(void *object); + +PN_EXTERN int pn_inspect(void *object, pn_string_t *dst); 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 char *pn_tostring(void *object); 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); +void pn_list_set(pn_list_t *list, int index, void *value); +void *pn_list_pop(pn_list_t *list); +PN_EXTERN ssize_t pn_list_index(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); +void pn_list_clear(pn_list_t *list); +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); @@ -198,66 +174,36 @@ 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 pn_string_t *pn_stringn(const char *bytes, size_t n); 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); +ssize_t pn_string_put(pn_string_t *string, char *dst); +void pn_string_clear(pn_string_t *string); PN_EXTERN int pn_string_format(pn_string_t *string, const char *format, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 2, 3))) #endif ; -PN_EXTERN int pn_string_vformat(pn_string_t *string, const char *format, va_list ap); +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, ...) #ifdef __GNUC__ - __attribute__ ((format (printf, 2, 3))) +__attribute__ ((format (printf, 2, 3))) #endif - ; -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); +; +int pn_string_vaddf(pn_string_t *string, const char *format, va_list ap); +int pn_string_grow(pn_string_t *string, size_t capacity); +char *pn_string_buffer(pn_string_t *string); +size_t pn_string_capacity(pn_string_t *string); +int pn_string_resize(pn_string_t *string, size_t size); +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_iterator_next_t next, size_t size); PN_EXTERN void *pn_iterator_next(pn_iterator_t *iterator); -#define PN_LEGCTX ((pn_handle_t) 0) - -/** - 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_HANDLE(name) \ - static const char _PN_HANDLE_ ## name = 0; \ - static const pn_handle_t name = ((pn_handle_t) &_PN_HANDLE_ ## name); - -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); - /** * @endcond */ @@ -266,4 +212,4 @@ PN_EXTERN void pn_record_clear(pn_record_t *record); } #endif -#endif /* object.h */ +#endif // PROTON_OBJECT_PRIVATE_H diff --git a/c/src/core/value_dump.h b/c/src/core/value_dump.h index 0f6418f5a..3da41249c 100644 --- a/c/src/core/value_dump.h +++ b/c/src/core/value_dump.h @@ -24,6 +24,8 @@ #include "proton/types.h" +#include "core/object_private.h" + struct pn_fixed_string_t; size_t pni_value_dump(pn_bytes_t frame, struct pn_fixed_string_t *output); diff --git a/c/src/handlers/handshaker.c b/c/src/handlers/handshaker.c index f52ed86da..6bf42150c 100644 --- a/c/src/handlers/handshaker.c +++ b/c/src/handlers/handshaker.c @@ -19,10 +19,14 @@ * */ +#include <proton/handlers.h> + #include <proton/connection.h> #include <proton/session.h> #include <proton/link.h> -#include <proton/handlers.h> + +#include "core/object_private.h" + #include <assert.h> static void pn_handshaker_dispatch(pn_handler_t *handler, pn_event_t *event, pn_event_type_t type) { diff --git a/c/src/handlers/iohandler.c b/c/src/handlers/iohandler.c index f8357c5b0..86d767a82 100644 --- a/c/src/handlers/iohandler.c +++ b/c/src/handlers/iohandler.c @@ -19,12 +19,15 @@ * */ +#include <proton/handlers.h> + +#include <proton/transport.h> + +#include "core/object_private.h" #include "reactor/io.h" #include "reactor/reactor.h" #include "reactor/selector.h" -#include <proton/handlers.h> -#include <proton/transport.h> #include <assert.h> static const char pni_selector_handle = 0; diff --git a/c/src/messenger/subscription.c b/c/src/messenger/subscription.c index c10d3c7cb..b692e1a17 100644 --- a/c/src/messenger/subscription.c +++ b/c/src/messenger/subscription.c @@ -22,11 +22,13 @@ #include "subscription.h" #include <proton/messenger.h> -#include <proton/object.h> + +#include "core/object_private.h" +#include "messenger.h" + #include <assert.h> #include <string.h> -#include "messenger.h" struct pn_subscription_t { pn_messenger_t *messenger; diff --git a/c/src/messenger/subscription.h b/c/src/messenger/subscription.h index 382b25a9c..38ff4cdae 100644 --- a/c/src/messenger/subscription.h +++ b/c/src/messenger/subscription.h @@ -25,6 +25,8 @@ #include <proton/messenger.h> #include <proton/object.h> +#include "core/object_private.h" + extern const pn_class_t PN_CLASSCLASS(pn_subscription); pn_subscription_t *pn_subscription(pn_messenger_t *messenger, diff --git a/c/src/reactor/acceptor.c b/c/src/reactor/acceptor.c index cc3b7d3ee..9fb3fda69 100644 --- a/c/src/reactor/acceptor.c +++ b/c/src/reactor/acceptor.c @@ -28,6 +28,8 @@ #include "selectable.h" #include "selector.h" +#include "core/object_private.h" + #include <string.h> pn_selectable_t *pn_reactor_selectable_transport(pn_reactor_t *reactor, pn_socket_t sock, pn_transport_t *transport); diff --git a/c/src/reactor/connection.c b/c/src/reactor/connection.c index 390a9fa2f..9189d954f 100644 --- a/c/src/reactor/connection.c +++ b/c/src/reactor/connection.c @@ -22,18 +22,20 @@ #define PN_USE_DEPRECATED_API 1 #include <proton/connection.h> -#include <proton/object.h> #include <proton/sasl.h> #include <proton/ssl.h> #include <proton/transport.h> #include <proton/url.h> -#include <assert.h> -#include <stdio.h> -#include <string.h> + +#include "core/object_private.h" #include "io.h" #include "selectable.h" #include "reactor.h" +#include <assert.h> +#include <stdio.h> +#include <string.h> + // XXX: overloaded for both directions PN_HANDLE(PN_TRANCTX) PN_HANDLE(PNI_CONN_PEER_ADDRESS) diff --git a/c/src/reactor/handler.c b/c/src/reactor/handler.c index 5cb3fe101..0bd2965ef 100644 --- a/c/src/reactor/handler.c +++ b/c/src/reactor/handler.c @@ -19,9 +19,11 @@ * */ -#include <proton/object.h> #include <proton/reactor.h> #include <proton/event.h> + +#include "core/object_private.h" + #include <string.h> #include <assert.h> diff --git a/c/src/reactor/io/posix/io.c b/c/src/reactor/io/posix/io.c index 2ddb5c0c1..1c70b8c96 100644 --- a/c/src/reactor/io/posix/io.c +++ b/c/src/reactor/io/posix/io.c @@ -19,11 +19,10 @@ * */ +#include "core/object_private.h" +#include "platform/platform.h" // pn_i_error_from_errno #include "reactor/io.h" #include "reactor/selector.h" -#include "platform/platform.h" // pn_i_error_from_errno - -#include <proton/object.h> #include <ctype.h> #include <errno.h> diff --git a/c/src/reactor/io/windows/iocp.h b/c/src/reactor/io/windows/iocp.h index 327e89d3c..1a6bef76b 100644 --- a/c/src/reactor/io/windows/iocp.h +++ b/c/src/reactor/io/windows/iocp.h @@ -23,10 +23,11 @@ */ #include <proton/import_export.h> -#include <proton/object.h> #include <proton/selectable.h> #include <proton/type_compat.h> +#include "core/object_private.h" + typedef struct pni_acceptor_t pni_acceptor_t; typedef struct write_result_t write_result_t; typedef struct read_result_t read_result_t; diff --git a/c/src/reactor/reactor.c b/c/src/reactor/reactor.c index df92cbe05..dbb9e8e26 100644 --- a/c/src/reactor/reactor.c +++ b/c/src/reactor/reactor.c @@ -19,12 +19,12 @@ * */ +#include "core/object_private.h" #include "io.h" #include "reactor.h" #include "selectable.h" #include "platform/platform.h" // pn_i_now -#include <proton/object.h> #include <proton/handlers.h> #include <proton/event.h> #include <proton/transport.h> diff --git a/c/src/reactor/selectable.c b/c/src/reactor/selectable.c index 220d1c9da..257989f3e 100644 --- a/c/src/reactor/selectable.c +++ b/c/src/reactor/selectable.c @@ -22,8 +22,8 @@ #include "selectable.h" #include <proton/error.h> -#include <proton/object.h> +#include "core/object_private.h" #include "io.h" #include <assert.h> diff --git a/c/src/reactor/selectable.h b/c/src/reactor/selectable.h index 251e6e238..433d6656b 100644 --- a/c/src/reactor/selectable.h +++ b/c/src/reactor/selectable.h @@ -29,6 +29,8 @@ #include <proton/selectable.h> #include <proton/object.h> +#include "core/object_private.h" + extern const pn_class_t PN_CLASSCLASS(pn_selectable); void *pni_selectable_get_context(pn_selectable_t *selectable); diff --git a/c/src/reactor/timer.c b/c/src/reactor/timer.c index 5283a8fea..1f552b349 100644 --- a/c/src/reactor/timer.c +++ b/c/src/reactor/timer.c @@ -19,8 +19,10 @@ * */ -#include <proton/object.h> #include <proton/reactor.h> + +#include "core/object_private.h" + #include <assert.h> struct pn_task_t { diff --git a/c/tests/event_test.cpp b/c/tests/event_test.cpp index 3d2faf695..4045a8fd7 100644 --- a/c/tests/event_test.cpp +++ b/c/tests/event_test.cpp @@ -19,10 +19,11 @@ * */ -#include "./pn_test.hpp" +#include "pn_test.hpp" #include <proton/event.h> -#include <proton/object.h> + +#include "core/object_private.h" TEST_CASE("event_collector") { pn_collector_t *collector = pn_collector(); diff --git a/c/tests/object_test.cpp b/c/tests/object_test.cpp index bd9d27eeb..52fbab9e6 100644 --- a/c/tests/object_test.cpp +++ b/c/tests/object_test.cpp @@ -19,9 +19,10 @@ * */ -#include "./pn_test.hpp" +#include "pn_test.hpp" + +#include "core/object_private.h" -#include <proton/object.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> diff --git a/c/tools/reactor-recv.c b/c/tools/reactor-recv.c index 0d2fb5b55..649337cd4 100644 --- a/c/tools/reactor-recv.c +++ b/c/tools/reactor-recv.c @@ -33,6 +33,7 @@ #include "proton/url.h" #include "msgr-common.h" + #include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/python/cproton.i b/python/cproton.i index 7a3407ee1..125999ca8 100644 --- a/python/cproton.i +++ b/python/cproton.i @@ -26,11 +26,11 @@ /* TODO: Remove once pn_work_head() and related have been removed from Proton */ #define PN_USE_DEPRECATED_API 1 +#include <proton/cid.h> #include <proton/engine.h> #include <proton/message.h> #include <proton/object.h> #include <proton/sasl.h> -#include <proton/messenger.h> #include <proton/ssl.h> /* diff --git a/ruby/cproton.i b/ruby/cproton.i index 00b3593dc..ae2a7ef7b 100644 --- a/ruby/cproton.i +++ b/ruby/cproton.i @@ -22,6 +22,7 @@ #define PN_USE_DEPRECATED_API 1 #include <proton/connection_driver.h> +#include <proton/cid.h> #include <proton/engine.h> #include <proton/handlers.h> #include <proton/message.h> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
