2001-12-23 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mono / io-layer / wapi-private.h
1 #ifndef _WAPI_PRIVATE_H_
2 #define _WAPI_PRIVATE_H_
3
4 #include <config.h>
5 #include <glib.h>
6
7 #include "mono/io-layer/handles.h"
8
9 typedef enum {
10         WAPI_HANDLE_FILE,
11         WAPI_HANDLE_CONSOLE,
12         WAPI_HANDLE_THREAD,
13         WAPI_HANDLE_SEM,
14         WAPI_HANDLE_MUTEX,
15         WAPI_HANDLE_EVENT,
16         WAPI_HANDLE_COUNT,
17 } WapiHandleType;
18
19 struct _WapiHandleOps 
20 {
21         /* All handle types */
22         void (*close)(WapiHandle *handle);
23
24         /* File, console and pipe handles */
25         WapiFileType (*getfiletype)(void);
26         
27         /* File and console handles */
28         gboolean (*readfile)(WapiHandle *handle, gpointer buffer,
29                              guint32 numbytes, guint32 *bytesread,
30                              WapiOverlapped *overlapped);
31         gboolean (*writefile)(WapiHandle *handle, gconstpointer buffer,
32                               guint32 numbytes, guint32 *byteswritten,
33                               WapiOverlapped *overlapped);
34         
35         /* File handles */
36         guint32 (*seek)(WapiHandle *handle, gint32 movedistance,
37                         gint32 *highmovedistance, WapiSeekMethod method);
38         gboolean (*setendoffile)(WapiHandle *handle);
39         guint32 (*getfilesize)(WapiHandle *handle, guint32 *highsize);
40         gboolean (*getfiletime)(WapiHandle *handle, WapiFileTime *create_time,
41                                 WapiFileTime *last_access,
42                                 WapiFileTime *last_write);
43         gboolean (*setfiletime)(WapiHandle *handle,
44                                 const WapiFileTime *create_time,
45                                 const WapiFileTime *last_access,
46                                 const WapiFileTime *last_write);
47         
48         /* WaitForSingleObject */
49         gboolean (*wait)(WapiHandle *handle, WapiHandle *signal, guint32 ms);
50
51         /* WaitForMultipleObjects */
52         guint32 (*wait_multiple)(gpointer data);
53
54         /* SignalObjectAndWait */
55         void (*signal)(WapiHandle *signal);
56 };
57
58 struct _WapiHandle
59 {
60         WapiHandleType type;
61         guint ref;
62         gboolean signalled;
63         struct _WapiHandleOps *ops;
64 };
65
66 #define _WAPI_HANDLE_INIT(_handle, _type, _ops) G_STMT_START {\
67                 _handle->type=_type;\
68                 _handle->ref=1;\
69                 _handle->signalled=FALSE;\
70                 _handle->ops=&_ops;\
71         } G_STMT_END;
72
73 #endif /* _WAPI_PRIVATE_H_ */