master
 1#ifndef __OS_WORKGROUP_BASE__
 2#define __OS_WORKGROUP_BASE__
 3
 4#ifndef __OS_WORKGROUP_INDIRECT__
 5#error "Please #include <os/workgroup.h> instead of this file directly."
 6#endif
 7
 8#include <sys/types.h>
 9#include <stddef.h>
10#include <stdint.h>
11#include <stdbool.h>
12#include <string.h>
13#include <stdlib.h>
14
15#include <mach/port.h>
16
17#include <Availability.h>
18#include <os/base.h>
19#include <os/object.h>
20#include <os/clock.h>
21
22#if __has_feature(assume_nonnull)
23#define OS_WORKGROUP_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
24#define OS_WORKGROUP_ASSUME_NONNULL_END   _Pragma("clang assume_nonnull end")
25#else
26#define OS_WORKGROUP_ASSUME_NONNULL_BEGIN
27#define OS_WORKGROUP_ASSUME_NONNULL_END
28#endif
29#if __has_feature(enumerator_attributes)
30#define OS_WORKGROUP_ENUM_API_DEPRECATED_WITH_REPLACEMENT(...) \
31		API_DEPRECATED_WITH_REPLACEMENT(__VA_ARGS__)
32#else
33#define OS_WORKGROUP_ENUM_API_DEPRECATED_WITH_REPLACEMENT(...)
34#endif
35#define OS_WORKGROUP_WARN_RESULT __attribute__((__warn_unused_result__))
36#define OS_WORKGROUP_EXPORT OS_EXPORT
37#define OS_WORKGROUP_RETURNS_RETAINED OS_OBJECT_RETURNS_RETAINED
38#define OS_WORKGROUP_ASSUME_ABI_SINGLE_BEGIN OS_ASSUME_PTR_ABI_SINGLE_BEGIN
39#define OS_WORKGROUP_ASSUME_ABI_SINGLE_END OS_ASSUME_PTR_ABI_SINGLE_END
40#define OS_WORKGROUP_UNSAFE_INDEXABLE OS_UNSAFE_INDEXABLE
41
42#define OS_WORKGROUP_DECL(name, swift_name) \
43	OS_SWIFT_NAME(swift_name) \
44	OS_OBJECT_SHOW_CLASS(name, OS_OBJECT_CLASS(object))
45
46#if OS_OBJECT_USE_OBJC
47#define OS_WORKGROUP_SUBCLASS_DECL_PROTO(name, swift_name, ...) \
48	OS_SWIFT_NAME(swift_name) \
49	OS_OBJECT_DECL_PROTOCOL(name ## __VA_ARGS__ )
50#else
51#define OS_WORKGROUP_SUBCLASS_DECL_PROTO(name, swift_name, ...)
52#endif
53
54#define OS_WORKGROUP_SUBCLASS_DECL(name, super, swift_name, ...) \
55	OS_SWIFT_NAME(swift_name) \
56	OS_OBJECT_SHOW_SUBCLASS(name, super, name, ## __VA_ARGS__)
57
58#if defined(__LP64__)
59#define __OS_WORKGROUP_ATTR_SIZE__ 60
60#define __OS_WORKGROUP_INTERVAL_DATA_SIZE__ 56
61#define __OS_WORKGROUP_JOIN_TOKEN_SIZE__ 36
62#else
63#define __OS_WORKGROUP_ATTR_SIZE__ 60
64#define __OS_WORKGROUP_INTERVAL_DATA_SIZE__ 56
65#define __OS_WORKGROUP_JOIN_TOKEN_SIZE__ 28
66#endif
67
68#define _OS_WORKGROUP_ATTR_SIG_DEFAULT_INIT 0x2FA863B4
69#define _OS_WORKGROUP_ATTR_SIG_EMPTY_INIT 0x2FA863C4
70
71OS_WORKGROUP_ASSUME_ABI_SINGLE_BEGIN
72
73struct OS_REFINED_FOR_SWIFT os_workgroup_attr_opaque_s {
74	uint32_t sig;
75	char opaque[__OS_WORKGROUP_ATTR_SIZE__];
76};
77
78#define _OS_WORKGROUP_INTERVAL_DATA_SIG_INIT 0x52A74C4D
79struct OS_REFINED_FOR_SWIFT os_workgroup_interval_data_opaque_s {
80	uint32_t sig;
81	char opaque[__OS_WORKGROUP_INTERVAL_DATA_SIZE__];
82};
83
84struct OS_REFINED_FOR_SWIFT os_workgroup_join_token_opaque_s {
85	uint32_t sig;
86	char opaque[__OS_WORKGROUP_JOIN_TOKEN_SIZE__];
87};
88
89OS_WORKGROUP_ASSUME_ABI_SINGLE_END
90
91#endif /* __OS_WORKGROUP_BASE__ */