blob: b346271c0a695fc92315f8354428461e5dc685c6 [file] [log] [blame]
/*
* Copyright (c) 2008-2009 Brent Fulgham <bfulgham@gmail.org>. All rights reserved.
*
* This source code is a modified version of the CoreFoundation sources released by Apple Inc. under
* the terms of the APSL version 2.0 (see below).
*
* For information about changes from the original Apple source release can be found by reviewing the
* source control system for the project at https://sourceforge.net/svn/?group_id=246198.
*
* The original license information is as follows:
*
* Copyright (c) 2008 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/* CFRunLoopPriv.h
Copyright (c) 2006-2007, Apple Inc. All rights reserved.
*/
#if (DEPLOYMENT_TARGET_MACOSX || 0)
/* -------- -------- -------- -------- -------- -------- -------- -------- */
#import "CFObject.h"
#include <CoreFoundation/CFRunLoop.h>
#include <CoreFoundation/CFMachPort.h>
#include <CoreFoundation/CFSocket.h>
#include <CoreFoundation/CFArray.h>
#include <CoreFoundation/CFBag.h>
#include <mach/mach.h>
#include <sys/event.h>
#include <pthread.h>
@class CFRunLoopSourceSet;
typedef CFRunLoopSourceContext CFRunLoopSourceContext0;
typedef CFMachPortContext CFRunLoopMachPortContext;
typedef CFSocketContext CFRunLoopSocketContext;
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopSource : CFObject {
uint8_t _cfruntime_[8]; // large enough for 32-bit or 64-bit
int _kq;
mach_port_t _portset;
mach_port_t _port;
CFIndex _order;
uint8_t _invalid;
uint8_t _firing;
uint8_t _ownsPort;
uint8_t _async;
}
- (int)kqueue;
- (mach_port_t)machPortSet;
- (mach_port_t)machPort;
- (void)setOrder:(CFIndex)o;
- (CFIndex)order;
- (void)setAsyncStrategy:(uint8_t)s;
- (uint8_t)asyncStrategy;
- (void)perform:(mach_msg_header_t *)msg;
- (void)invalidate;
- (Boolean)isValid;
- (void)noteAddedToSourceSet:(CFRunLoopSourceSet *)ss;
- (void)noteRemovedFromSourceSet:(CFRunLoopSourceSet *)ss;
- (CFStringRef)copyPartialDebugDescription; // subclasses override
- (CFStringRef)copyDebugDescription;
@end
@interface CFRunLoopVersion0SourceCFRef : CFRunLoopSource {
CFRunLoopSourceContext0 _context;
}
- (Boolean)setContext:(CFRunLoopSourceContext0)c;
- (CFRunLoopSourceContext0)context;
- (void)markReady;
- (void)handle;
- (void)scheduleInRunLoop:(CFRunLoopRef)rl mode:(CFStringRef)n;
- (void)cancelFromRunLoop:(CFRunLoopRef)rl mode:(CFStringRef)n;
@end
@interface CFRunLoopVersion1SourceCFRef : CFRunLoopSource {
CFRunLoopSourceContext1 _context;
}
- (Boolean)setContext:(CFRunLoopSourceContext1)c;
- (CFRunLoopSourceContext1)context;
- (void)markReady;
- (void)handle:(mach_msg_header_t *)msg;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopTimerSource : CFRunLoopSource {
CFAbsoluteTime _fireAT;
CFTimeInterval _interval;
}
- (void)setFireTime:(CFAbsoluteTime)at;
- (CFAbsoluteTime)fireTime;
- (void)setInterval:(CFTimeInterval)i;
- (CFTimeInterval)interval;
- (void)handle;
@end
@interface CFRunLoopTimerSourceCFRef : CFRunLoopTimerSource {
void *_function;
CFRunLoopTimerContext _context;
}
- (void)setFunction:(void *)f;
- (void *)function;
- (Boolean)setContext:(CFRunLoopTimerContext)c;
- (CFRunLoopTimerContext)context;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopMachPortSource : CFRunLoopSource {
mach_port_t _notifyPort;
mach_port_t _oldNotifyPort;
}
+ (id)newWithPort:(mach_port_t)p;
- (void)handle:(mach_msg_header_t *)msg;
@end
@interface CFRunLoopMachPortSourceCFRef : CFRunLoopMachPortSource {
void *_function;
CFRunLoopMachPortContext _context;
void *_invalidation;
}
- (void)setFunction:(void *)f;
- (void *)function;
- (Boolean)setContext:(CFRunLoopMachPortContext)c;
- (CFRunLoopMachPortContext)context;
- (void)setInvalidationFunction:(void *)f;
- (void *)invalidationFunction;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopKEventSource : CFRunLoopSource {
struct kevent _filter;
}
- (Boolean)setFilter:(struct kevent)kev;
- (struct kevent)filter;
- (void)handle:(struct kevent *)kev;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopSignalSource : CFRunLoopSource {
int _signal;
}
- (Boolean)setSignal:(int)sig;
- (int)signal;
- (long)poll;
- (void)handle:(long)n;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopProcessDeathSource : CFRunLoopSource {
int _pid;
}
- (Boolean)setProcessID:(int)pid;
- (int)processID;
- (void)handle;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopSocketSource : CFRunLoopSource {
int _socket;
uint8_t _ownsSocket;
uint8_t _enabledR;
uint8_t _enabledW;
}
+ (id)newWithSocket:(int)s;
- (int)socket;
- (CFDataRef)copyLocalAddress;
- (CFDataRef)copyRemoteAddress;
- (void)setReadEventsEnabled:(Boolean)b;
- (Boolean)readEventsEnabled;
- (void)setWriteEventsEnabled:(Boolean)b;
- (Boolean)writeEventsEnabled;
- (void)handleReadability:(CFIndex)amt endOfFile:(Boolean)b;
- (void)performRead:(struct kevent *)kev;
- (void)handleWritability:(CFIndex)amt endOfFile:(Boolean)b;
- (void)performWrite:(struct kevent *)kev;
@end
@interface CFRunLoopSocketSourceCFRef : CFRunLoopSocketSource {
void *_function;
CFRunLoopSocketContext _context;
uint8_t _callbacks;
uint8_t _flags;
uint8_t _disabled;
}
- (void)setFunction:(void *)f;
- (void *)function;
- (Boolean)setContext:(CFRunLoopSocketContext)c;
- (CFRunLoopSocketContext)context;
- (void)setCallBackTypes:(uint8_t)f;
- (uint8_t)callBackTypes;
- (void)setFlags:(uint8_t)f;
- (uint8_t)flags;
- (void)setDisabledFlags:(uint8_t)f;
- (uint8_t)disabledFlags;
- (Boolean)handleAcceptError:(int)err;
- (Boolean)handleReadError:(int)err;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopObserver : CFRunLoopSource {
}
- (void)observeEntry:(CFRunLoopSourceSet *)ss;
- (void)observeBeforeWaiting:(CFRunLoopSourceSet *)ss;
- (void)observeAfterWaiting:(CFRunLoopSourceSet *)ss;
- (void)observeExit:(CFRunLoopSourceSet *)ss;
@end
@interface CFRunLoopObserverCFRef : CFRunLoopObserver {
void *_function;
CFRunLoopObserverContext _context;
CFOptionFlags _activities;
uint8_t _oneshot;
}
- (void)setFunction:(void *)f;
- (void *)function;
- (Boolean)setContext:(CFRunLoopObserverContext)c;
- (CFRunLoopObserverContext)context;
- (void)setActivities:(CFOptionFlags)a;
- (CFOptionFlags)activities;
- (void)setOneshot:(Boolean)b;
- (Boolean)oneshot;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopSourceSet : CFRunLoopObserver {
CFMutableBagRef _sources;
CFStringRef _name;
pthread_t _thread;
CFMutableArrayRef _observers[4];
CFRunLoopTimerSource *_timeoutTimer;
CFRunLoopMachPortSource *_wakeupPort;
uint8_t _stopped;
uint8_t _waiting;
}
+ (void)removeSourceFromAllSets:(CFRunLoopSource *)src;
- (void)setName:(CFStringRef)n;
- (CFStringRef)name;
- (void)setAffineThread:(pthread_t)t;
- (pthread_t)affineThread;
- (Boolean)containsObserver:(CFRunLoopObserver *)o;
- (void)addObserver:(CFRunLoopObserver *)o activities:(CFRunLoopActivity)a;
- (void)removeObserver:(CFRunLoopObserver *)o activities:(CFRunLoopActivity)a;
- (Boolean)containsSource:(CFRunLoopSource *)src;
- (void)addSource:(CFRunLoopSource *)src;
- (void)removeSource:(CFRunLoopSource *)src;
- (void)forEachSource:(Boolean (*)(CFRunLoopSource *, void *))f context:(void *)c;
- (void)stop;
- (void)wakeup;
- (Boolean)isWaiting;
- (Boolean)isEmpty;
- (Boolean)hasInputAvailable;
- (int32_t)serviceUntil:(CFAbsoluteTime)at handleOne:(Boolean)handleOne;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
@interface CFRunLoopCFRef : CFObject {
uint8_t _cfruntime_[8]; // large enough for 32-bit or 64-bit
pthread_t _thread;
void *_counterpart;
CFMutableArrayRef _sourceSets;
CFRunLoopSourceSet *_currentSet;
uint8_t _invalid;
}
- (void)setAffineThread:(pthread_t)t;
- (pthread_t)affineThread;
- (void)setCounterpart:(void *)c;
- (void *)counterpart;
- (void)invalidate;
- (Boolean)isValid;
- (CFArrayRef)copySourceSets;
- (void)setCurrentSourceSet:(CFRunLoopSourceSet *)ss;
- (CFRunLoopSourceSet *)currentSourceSet;
- (CFRunLoopSourceSet *)lookupSourceSetWithName:(CFStringRef)n;
- (CFRunLoopSourceSet *)lookupOrCreateSourceSetWithName:(CFStringRef)n;
- (CFStringRef)copyDebugDescription;
@end
/* -------- -------- -------- -------- -------- -------- -------- -------- */
#endif