introspection_internal.h [plain text]
#ifndef __DISPATCH_INTROSPECTION_INTERNAL__
#define __DISPATCH_INTROSPECTION_INTERNAL__
#if DISPATCH_INTROSPECTION
#define DISPATCH_INTROSPECTION_QUEUE_LIST \
TAILQ_ENTRY(dispatch_queue_s) diq_list
#define DISPATCH_INTROSPECTION_QUEUE_LIST_SIZE \
sizeof(TAILQ_ENTRY(dispatch_queue_s))
void _dispatch_introspection_init(void);
void _dispatch_introspection_thread_add(void);
dispatch_queue_t _dispatch_introspection_queue_create(dispatch_queue_t dq);
void _dispatch_introspection_queue_dispose(dispatch_queue_t dq);
void _dispatch_introspection_queue_item_enqueue(dispatch_queue_t dq,
dispatch_object_t dou);
void _dispatch_introspection_queue_item_dequeue(dispatch_queue_t dq,
dispatch_object_t dou);
void _dispatch_introspection_callout_entry(void *ctxt, dispatch_function_t f);
void _dispatch_introspection_callout_return(void *ctxt, dispatch_function_t f);
#if !__OBJC2__
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_push_list(dispatch_queue_t dq,
dispatch_object_t head, dispatch_object_t tail) {
struct dispatch_object_s *dou = head._do;
do {
_dispatch_introspection_queue_item_enqueue(dq, dou);
} while (dou != tail._do && (dou = dou->do_next));
};
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_push(dispatch_queue_t dq, dispatch_object_t dou) {
_dispatch_introspection_queue_item_enqueue(dq, dou);
};
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_pop(dispatch_queue_t dq, dispatch_object_t dou) {
_dispatch_introspection_queue_item_dequeue(dq, dou);
};
#endif
#else
#define DISPATCH_INTROSPECTION_QUEUE_LIST
#define DISPATCH_INTROSPECTION_QUEUE_LIST_SIZE 0
#define _dispatch_introspection_init()
#define _dispatch_introspection_thread_add()
#define _dispatch_introspection_thread_remove()
DISPATCH_ALWAYS_INLINE
static inline dispatch_queue_t
_dispatch_introspection_queue_create(dispatch_queue_t dq) { return dq; }
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_dispose(dispatch_queue_t dq) { (void)dq; }
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_push_list(dispatch_queue_t dq DISPATCH_UNUSED,
dispatch_object_t head DISPATCH_UNUSED,
dispatch_object_t tail DISPATCH_UNUSED) {}
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_push(dispatch_queue_t dq DISPATCH_UNUSED,
dispatch_object_t dou DISPATCH_UNUSED) {}
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_queue_pop(dispatch_queue_t dq DISPATCH_UNUSED,
dispatch_object_t dou DISPATCH_UNUSED) {}
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_callout_entry(void *ctxt DISPATCH_UNUSED,
dispatch_function_t f DISPATCH_UNUSED) {}
DISPATCH_ALWAYS_INLINE
static inline void
_dispatch_introspection_callout_return(void *ctxt DISPATCH_UNUSED,
dispatch_function_t f DISPATCH_UNUSED) {}
#endif // DISPATCH_INTROSPECTION
#endif // __DISPATCH_INTROSPECTION_INTERNAL__