2 * Copyright (c) 2012 Apple Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
25 Copyright (c) 1998-2012, Apple Inc. All rights reserved.
28 #if !defined(__COREFOUNDATION_CFRUNLOOP__)
29 #define __COREFOUNDATION_CFRUNLOOP__ 1
31 #include <CoreFoundation/CFBase.h>
32 #include <CoreFoundation/CFArray.h>
33 #include <CoreFoundation/CFDate.h>
34 #include <CoreFoundation/CFString.h>
35 #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
36 #include <mach/port.h>
41 typedef struct __CFRunLoop
* CFRunLoopRef
;
43 typedef struct __CFRunLoopSource
* CFRunLoopSourceRef
;
45 typedef struct __CFRunLoopObserver
* CFRunLoopObserverRef
;
47 typedef struct __CFRunLoopTimer
* CFRunLoopTimerRef
;
49 /* Reasons for CFRunLoopRunInMode() to Return */
51 kCFRunLoopRunFinished
= 1,
52 kCFRunLoopRunStopped
= 2,
53 kCFRunLoopRunTimedOut
= 3,
54 kCFRunLoopRunHandledSource
= 4
57 /* Run Loop Observer Activities */
58 typedef CF_OPTIONS(CFOptionFlags
, CFRunLoopActivity
) {
59 kCFRunLoopEntry
= (1UL << 0),
60 kCFRunLoopBeforeTimers
= (1UL << 1),
61 kCFRunLoopBeforeSources
= (1UL << 2),
62 kCFRunLoopBeforeWaiting
= (1UL << 5),
63 kCFRunLoopAfterWaiting
= (1UL << 6),
64 kCFRunLoopExit
= (1UL << 7),
65 kCFRunLoopAllActivities
= 0x0FFFFFFFU
68 CF_EXPORT
const CFStringRef kCFRunLoopDefaultMode
;
69 CF_EXPORT
const CFStringRef kCFRunLoopCommonModes
;
71 CF_EXPORT CFTypeID
CFRunLoopGetTypeID(void);
73 CF_EXPORT CFRunLoopRef
CFRunLoopGetCurrent(void);
74 CF_EXPORT CFRunLoopRef
CFRunLoopGetMain(void);
76 CF_EXPORT CFStringRef
CFRunLoopCopyCurrentMode(CFRunLoopRef rl
);
78 CF_EXPORT CFArrayRef
CFRunLoopCopyAllModes(CFRunLoopRef rl
);
80 CF_EXPORT
void CFRunLoopAddCommonMode(CFRunLoopRef rl
, CFStringRef mode
);
82 CF_EXPORT CFAbsoluteTime
CFRunLoopGetNextTimerFireDate(CFRunLoopRef rl
, CFStringRef mode
);
84 CF_EXPORT
void CFRunLoopRun(void);
85 CF_EXPORT SInt32
CFRunLoopRunInMode(CFStringRef mode
, CFTimeInterval seconds
, Boolean returnAfterSourceHandled
);
86 CF_EXPORT Boolean
CFRunLoopIsWaiting(CFRunLoopRef rl
);
87 CF_EXPORT
void CFRunLoopWakeUp(CFRunLoopRef rl
);
88 CF_EXPORT
void CFRunLoopStop(CFRunLoopRef rl
);
91 CF_EXPORT
void CFRunLoopPerformBlock(CFRunLoopRef rl
, CFTypeRef mode
, void (^block
)(void)) CF_AVAILABLE(10_6
, 4_0
);
94 CF_EXPORT Boolean
CFRunLoopContainsSource(CFRunLoopRef rl
, CFRunLoopSourceRef source
, CFStringRef mode
);
95 CF_EXPORT
void CFRunLoopAddSource(CFRunLoopRef rl
, CFRunLoopSourceRef source
, CFStringRef mode
);
96 CF_EXPORT
void CFRunLoopRemoveSource(CFRunLoopRef rl
, CFRunLoopSourceRef source
, CFStringRef mode
);
98 CF_EXPORT Boolean
CFRunLoopContainsObserver(CFRunLoopRef rl
, CFRunLoopObserverRef observer
, CFStringRef mode
);
99 CF_EXPORT
void CFRunLoopAddObserver(CFRunLoopRef rl
, CFRunLoopObserverRef observer
, CFStringRef mode
);
100 CF_EXPORT
void CFRunLoopRemoveObserver(CFRunLoopRef rl
, CFRunLoopObserverRef observer
, CFStringRef mode
);
102 CF_EXPORT Boolean
CFRunLoopContainsTimer(CFRunLoopRef rl
, CFRunLoopTimerRef timer
, CFStringRef mode
);
103 CF_EXPORT
void CFRunLoopAddTimer(CFRunLoopRef rl
, CFRunLoopTimerRef timer
, CFStringRef mode
);
104 CF_EXPORT
void CFRunLoopRemoveTimer(CFRunLoopRef rl
, CFRunLoopTimerRef timer
, CFStringRef mode
);
109 const void *(*retain
)(const void *info
);
110 void (*release
)(const void *info
);
111 CFStringRef (*copyDescription
)(const void *info
);
112 Boolean (*equal
)(const void *info1
, const void *info2
);
113 CFHashCode (*hash
)(const void *info
);
114 void (*schedule
)(void *info
, CFRunLoopRef rl
, CFStringRef mode
);
115 void (*cancel
)(void *info
, CFRunLoopRef rl
, CFStringRef mode
);
116 void (*perform
)(void *info
);
117 } CFRunLoopSourceContext
;
122 const void *(*retain
)(const void *info
);
123 void (*release
)(const void *info
);
124 CFStringRef (*copyDescription
)(const void *info
);
125 Boolean (*equal
)(const void *info1
, const void *info2
);
126 CFHashCode (*hash
)(const void *info
);
127 #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
128 mach_port_t (*getPort
)(void *info
);
129 void * (*perform
)(void *msg
, CFIndex size
, CFAllocatorRef allocator
, void *info
);
131 void * (*getPort
)(void *info
);
132 void (*perform
)(void *info
);
134 } CFRunLoopSourceContext1
;
136 CF_EXPORT CFTypeID
CFRunLoopSourceGetTypeID(void);
138 CF_EXPORT CFRunLoopSourceRef
CFRunLoopSourceCreate(CFAllocatorRef allocator
, CFIndex order
, CFRunLoopSourceContext
*context
);
140 CF_EXPORT CFIndex
CFRunLoopSourceGetOrder(CFRunLoopSourceRef source
);
141 CF_EXPORT
void CFRunLoopSourceInvalidate(CFRunLoopSourceRef source
);
142 CF_EXPORT Boolean
CFRunLoopSourceIsValid(CFRunLoopSourceRef source
);
143 CF_EXPORT
void CFRunLoopSourceGetContext(CFRunLoopSourceRef source
, CFRunLoopSourceContext
*context
);
144 CF_EXPORT
void CFRunLoopSourceSignal(CFRunLoopSourceRef source
);
149 const void *(*retain
)(const void *info
);
150 void (*release
)(const void *info
);
151 CFStringRef (*copyDescription
)(const void *info
);
152 } CFRunLoopObserverContext
;
154 typedef void (*CFRunLoopObserverCallBack
)(CFRunLoopObserverRef observer
, CFRunLoopActivity activity
, void *info
);
156 CF_EXPORT CFTypeID
CFRunLoopObserverGetTypeID(void);
158 CF_EXPORT CFRunLoopObserverRef
CFRunLoopObserverCreate(CFAllocatorRef allocator
, CFOptionFlags activities
, Boolean repeats
, CFIndex order
, CFRunLoopObserverCallBack callout
, CFRunLoopObserverContext
*context
);
160 CF_EXPORT CFRunLoopObserverRef
CFRunLoopObserverCreateWithHandler(CFAllocatorRef allocator
, CFOptionFlags activities
, Boolean repeats
, CFIndex order
, void (^block
) (CFRunLoopObserverRef observer
, CFRunLoopActivity activity
)) CF_AVAILABLE(10_7
, 5_0
);
163 CF_EXPORT CFOptionFlags
CFRunLoopObserverGetActivities(CFRunLoopObserverRef observer
);
164 CF_EXPORT Boolean
CFRunLoopObserverDoesRepeat(CFRunLoopObserverRef observer
);
165 CF_EXPORT CFIndex
CFRunLoopObserverGetOrder(CFRunLoopObserverRef observer
);
166 CF_EXPORT
void CFRunLoopObserverInvalidate(CFRunLoopObserverRef observer
);
167 CF_EXPORT Boolean
CFRunLoopObserverIsValid(CFRunLoopObserverRef observer
);
168 CF_EXPORT
void CFRunLoopObserverGetContext(CFRunLoopObserverRef observer
, CFRunLoopObserverContext
*context
);
173 const void *(*retain
)(const void *info
);
174 void (*release
)(const void *info
);
175 CFStringRef (*copyDescription
)(const void *info
);
176 } CFRunLoopTimerContext
;
178 typedef void (*CFRunLoopTimerCallBack
)(CFRunLoopTimerRef timer
, void *info
);
180 CF_EXPORT CFTypeID
CFRunLoopTimerGetTypeID(void);
182 CF_EXPORT CFRunLoopTimerRef
CFRunLoopTimerCreate(CFAllocatorRef allocator
, CFAbsoluteTime fireDate
, CFTimeInterval interval
, CFOptionFlags flags
, CFIndex order
, CFRunLoopTimerCallBack callout
, CFRunLoopTimerContext
*context
);
184 CF_EXPORT CFRunLoopTimerRef
CFRunLoopTimerCreateWithHandler(CFAllocatorRef allocator
, CFAbsoluteTime fireDate
, CFTimeInterval interval
, CFOptionFlags flags
, CFIndex order
, void (^block
) (CFRunLoopTimerRef timer
)) CF_AVAILABLE(10_7
, 5_0
);
187 CF_EXPORT CFAbsoluteTime
CFRunLoopTimerGetNextFireDate(CFRunLoopTimerRef timer
);
188 CF_EXPORT
void CFRunLoopTimerSetNextFireDate(CFRunLoopTimerRef timer
, CFAbsoluteTime fireDate
);
189 CF_EXPORT CFTimeInterval
CFRunLoopTimerGetInterval(CFRunLoopTimerRef timer
);
190 CF_EXPORT Boolean
CFRunLoopTimerDoesRepeat(CFRunLoopTimerRef timer
);
191 CF_EXPORT CFIndex
CFRunLoopTimerGetOrder(CFRunLoopTimerRef timer
);
192 CF_EXPORT
void CFRunLoopTimerInvalidate(CFRunLoopTimerRef timer
);
193 CF_EXPORT Boolean
CFRunLoopTimerIsValid(CFRunLoopTimerRef timer
);
194 CF_EXPORT
void CFRunLoopTimerGetContext(CFRunLoopTimerRef timer
, CFRunLoopTimerContext
*context
);
198 #endif /* ! __COREFOUNDATION_CFRUNLOOP__ */