2 * Copyright (c) 2011 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-2011, 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 */
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
67 typedef CFOptionFlags CFRunLoopActivity
;
69 CF_EXPORT
const CFStringRef kCFRunLoopDefaultMode
;
70 CF_EXPORT
const CFStringRef kCFRunLoopCommonModes
;
72 CF_EXPORT CFTypeID
CFRunLoopGetTypeID(void);
74 CF_EXPORT CFRunLoopRef
CFRunLoopGetCurrent(void);
75 CF_EXPORT CFRunLoopRef
CFRunLoopGetMain(void);
77 CF_EXPORT CFStringRef
CFRunLoopCopyCurrentMode(CFRunLoopRef rl
);
79 CF_EXPORT CFArrayRef
CFRunLoopCopyAllModes(CFRunLoopRef rl
);
81 CF_EXPORT
void CFRunLoopAddCommonMode(CFRunLoopRef rl
, CFStringRef mode
);
83 CF_EXPORT CFAbsoluteTime
CFRunLoopGetNextTimerFireDate(CFRunLoopRef rl
, CFStringRef mode
);
85 CF_EXPORT
void CFRunLoopRun(void);
86 CF_EXPORT SInt32
CFRunLoopRunInMode(CFStringRef mode
, CFTimeInterval seconds
, Boolean returnAfterSourceHandled
);
87 CF_EXPORT Boolean
CFRunLoopIsWaiting(CFRunLoopRef rl
);
88 CF_EXPORT
void CFRunLoopWakeUp(CFRunLoopRef rl
);
89 CF_EXPORT
void CFRunLoopStop(CFRunLoopRef rl
);
92 CF_EXPORT
void CFRunLoopPerformBlock(CFRunLoopRef rl
, CFTypeRef mode
, void (^block
)(void)) CF_AVAILABLE(10_6
, 4_0
);
95 CF_EXPORT Boolean
CFRunLoopContainsSource(CFRunLoopRef rl
, CFRunLoopSourceRef source
, CFStringRef mode
);
96 CF_EXPORT
void CFRunLoopAddSource(CFRunLoopRef rl
, CFRunLoopSourceRef source
, CFStringRef mode
);
97 CF_EXPORT
void CFRunLoopRemoveSource(CFRunLoopRef rl
, CFRunLoopSourceRef source
, CFStringRef mode
);
99 CF_EXPORT Boolean
CFRunLoopContainsObserver(CFRunLoopRef rl
, CFRunLoopObserverRef observer
, CFStringRef mode
);
100 CF_EXPORT
void CFRunLoopAddObserver(CFRunLoopRef rl
, CFRunLoopObserverRef observer
, CFStringRef mode
);
101 CF_EXPORT
void CFRunLoopRemoveObserver(CFRunLoopRef rl
, CFRunLoopObserverRef observer
, CFStringRef mode
);
103 CF_EXPORT Boolean
CFRunLoopContainsTimer(CFRunLoopRef rl
, CFRunLoopTimerRef timer
, CFStringRef mode
);
104 CF_EXPORT
void CFRunLoopAddTimer(CFRunLoopRef rl
, CFRunLoopTimerRef timer
, CFStringRef mode
);
105 CF_EXPORT
void CFRunLoopRemoveTimer(CFRunLoopRef rl
, CFRunLoopTimerRef timer
, CFStringRef mode
);
110 const void *(*retain
)(const void *info
);
111 void (*release
)(const void *info
);
112 CFStringRef (*copyDescription
)(const void *info
);
113 Boolean (*equal
)(const void *info1
, const void *info2
);
114 CFHashCode (*hash
)(const void *info
);
115 void (*schedule
)(void *info
, CFRunLoopRef rl
, CFStringRef mode
);
116 void (*cancel
)(void *info
, CFRunLoopRef rl
, CFStringRef mode
);
117 void (*perform
)(void *info
);
118 } CFRunLoopSourceContext
;
123 const void *(*retain
)(const void *info
);
124 void (*release
)(const void *info
);
125 CFStringRef (*copyDescription
)(const void *info
);
126 Boolean (*equal
)(const void *info1
, const void *info2
);
127 CFHashCode (*hash
)(const void *info
);
128 #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
129 mach_port_t (*getPort
)(void *info
);
130 void * (*perform
)(void *msg
, CFIndex size
, CFAllocatorRef allocator
, void *info
);
132 void * (*getPort
)(void *info
);
133 void (*perform
)(void *info
);
135 } CFRunLoopSourceContext1
;
137 CF_EXPORT CFTypeID
CFRunLoopSourceGetTypeID(void);
139 CF_EXPORT CFRunLoopSourceRef
CFRunLoopSourceCreate(CFAllocatorRef allocator
, CFIndex order
, CFRunLoopSourceContext
*context
);
141 CF_EXPORT CFIndex
CFRunLoopSourceGetOrder(CFRunLoopSourceRef source
);
142 CF_EXPORT
void CFRunLoopSourceInvalidate(CFRunLoopSourceRef source
);
143 CF_EXPORT Boolean
CFRunLoopSourceIsValid(CFRunLoopSourceRef source
);
144 CF_EXPORT
void CFRunLoopSourceGetContext(CFRunLoopSourceRef source
, CFRunLoopSourceContext
*context
);
145 CF_EXPORT
void CFRunLoopSourceSignal(CFRunLoopSourceRef source
);
150 const void *(*retain
)(const void *info
);
151 void (*release
)(const void *info
);
152 CFStringRef (*copyDescription
)(const void *info
);
153 } CFRunLoopObserverContext
;
155 typedef void (*CFRunLoopObserverCallBack
)(CFRunLoopObserverRef observer
, CFRunLoopActivity activity
, void *info
);
157 CF_EXPORT CFTypeID
CFRunLoopObserverGetTypeID(void);
159 CF_EXPORT CFRunLoopObserverRef
CFRunLoopObserverCreate(CFAllocatorRef allocator
, CFOptionFlags activities
, Boolean repeats
, CFIndex order
, CFRunLoopObserverCallBack callout
, CFRunLoopObserverContext
*context
);
161 CF_EXPORT CFRunLoopObserverRef
CFRunLoopObserverCreateWithHandler(CFAllocatorRef allocator
, CFOptionFlags activities
, Boolean repeats
, CFIndex order
, void (^block
) (CFRunLoopObserverRef observer
, CFRunLoopActivity activity
)) CF_AVAILABLE(10_7
, 5_0
);
164 CF_EXPORT CFOptionFlags
CFRunLoopObserverGetActivities(CFRunLoopObserverRef observer
);
165 CF_EXPORT Boolean
CFRunLoopObserverDoesRepeat(CFRunLoopObserverRef observer
);
166 CF_EXPORT CFIndex
CFRunLoopObserverGetOrder(CFRunLoopObserverRef observer
);
167 CF_EXPORT
void CFRunLoopObserverInvalidate(CFRunLoopObserverRef observer
);
168 CF_EXPORT Boolean
CFRunLoopObserverIsValid(CFRunLoopObserverRef observer
);
169 CF_EXPORT
void CFRunLoopObserverGetContext(CFRunLoopObserverRef observer
, CFRunLoopObserverContext
*context
);
174 const void *(*retain
)(const void *info
);
175 void (*release
)(const void *info
);
176 CFStringRef (*copyDescription
)(const void *info
);
177 } CFRunLoopTimerContext
;
179 typedef void (*CFRunLoopTimerCallBack
)(CFRunLoopTimerRef timer
, void *info
);
181 CF_EXPORT CFTypeID
CFRunLoopTimerGetTypeID(void);
183 CF_EXPORT CFRunLoopTimerRef
CFRunLoopTimerCreate(CFAllocatorRef allocator
, CFAbsoluteTime fireDate
, CFTimeInterval interval
, CFOptionFlags flags
, CFIndex order
, CFRunLoopTimerCallBack callout
, CFRunLoopTimerContext
*context
);
185 CF_EXPORT CFRunLoopTimerRef
CFRunLoopTimerCreateWithHandler(CFAllocatorRef allocator
, CFAbsoluteTime fireDate
, CFTimeInterval interval
, CFOptionFlags flags
, CFIndex order
, void (^block
) (CFRunLoopTimerRef timer
)) CF_AVAILABLE(10_7
, 5_0
);
188 CF_EXPORT CFAbsoluteTime
CFRunLoopTimerGetNextFireDate(CFRunLoopTimerRef timer
);
189 CF_EXPORT
void CFRunLoopTimerSetNextFireDate(CFRunLoopTimerRef timer
, CFAbsoluteTime fireDate
);
190 CF_EXPORT CFTimeInterval
CFRunLoopTimerGetInterval(CFRunLoopTimerRef timer
);
191 CF_EXPORT Boolean
CFRunLoopTimerDoesRepeat(CFRunLoopTimerRef timer
);
192 CF_EXPORT CFIndex
CFRunLoopTimerGetOrder(CFRunLoopTimerRef timer
);
193 CF_EXPORT
void CFRunLoopTimerInvalidate(CFRunLoopTimerRef timer
);
194 CF_EXPORT Boolean
CFRunLoopTimerIsValid(CFRunLoopTimerRef timer
);
195 CF_EXPORT
void CFRunLoopTimerGetContext(CFRunLoopTimerRef timer
, CFRunLoopTimerContext
*context
);
199 #endif /* ! __COREFOUNDATION_CFRUNLOOP__ */