diff options
Diffstat (limited to 'ghc/rts/win32/IOManager.h')
-rw-r--r-- | ghc/rts/win32/IOManager.h | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/ghc/rts/win32/IOManager.h b/ghc/rts/win32/IOManager.h deleted file mode 100644 index 4893e2387c..0000000000 --- a/ghc/rts/win32/IOManager.h +++ /dev/null @@ -1,110 +0,0 @@ -/* IOManager.h - * - * Non-blocking / asynchronous I/O for Win32. - * - * (c) sof, 2002-2003 - */ -#ifndef __IOMANAGER_H__ -#define __IOMANAGER_H__ -/* On the yucky side..suppress -Wmissing-declarations warnings when - * including <windows.h> - */ -extern void* GetCurrentFiber ( void ); -extern void* GetFiberData ( void ); -#include <windows.h> - -/* - The IOManager subsystem provides a non-blocking view - of I/O operations. It lets one (or more) OS thread(s) - issue multiple I/O requests, which the IOManager then - handles independently of/concurrent to the thread(s) - that issued the request. Upon completion, the issuing - thread can inspect the result of the I/O operation & - take appropriate action. - - The IOManager is intended used with the GHC RTS to - implement non-blocking I/O in Concurrent Haskell. - */ - -/* - * Our WorkQueue holds WorkItems, encoding IO and - * delay requests. - * - */ -typedef void (*CompletionProc)(unsigned int requestID, - int fd, - int len, - void* buf, - int errCode); - -/* - * Asynchronous procedure calls executed by a worker thread - * take a generic state argument pointer and return an int by - * default. - */ -typedef int (*DoProcProc)(void *param); - -typedef union workData { - struct { - int fd; - int len; - char *buf; - } ioData; - struct { - int msecs; - } delayData; - struct { - DoProcProc proc; - void* param; - } procData; -} WorkData; - -typedef struct WorkItem { - unsigned int workKind; - WorkData workData; - unsigned int requestID; - CompletionProc onCompletion; - unsigned int abandonOp; - struct WorkItem *link; -} WorkItem; - -extern CompletionProc onComplete; - -/* the kind of operations supported; you could easily imagine - * that instead of passing a tag describing the work to be performed, - * a function pointer is passed instead. Maybe later. - */ -#define WORKER_READ 1 -#define WORKER_WRITE 2 -#define WORKER_DELAY 4 -#define WORKER_FOR_SOCKET 8 -#define WORKER_DO_PROC 16 - -/* - * Starting up and shutting down. - */ -extern BOOL StartIOManager ( void ); -extern void ShutdownIOManager ( void ); - -/* - * Adding I/O and delay requests. With each request a - * completion routine is supplied, which the worker thread - * will invoke upon completion. - */ -extern int AddDelayRequest ( unsigned int msecs, - CompletionProc onCompletion); - -extern int AddIORequest ( int fd, - BOOL forWriting, - BOOL isSocket, - int len, - char* buffer, - CompletionProc onCompletion); - -extern int AddProcRequest ( void* proc, - void* data, - CompletionProc onCompletion); - -extern void abandonWorkRequest ( int reqID ); - -#endif /* __IOMANAGER_H__ */ |