00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef DBUS_SOCKET_SET_H
00027 #define DBUS_SOCKET_SET_H
00028
00029 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00030
00031 #include <dbus/dbus.h>
00032 #include <dbus/dbus-sysdeps.h>
00033
00034 typedef struct {
00035 DBusPollable fd;
00036 unsigned int flags;
00037 } DBusSocketEvent;
00038
00039 typedef struct DBusSocketSet DBusSocketSet;
00040
00041 typedef struct DBusSocketSetClass DBusSocketSetClass;
00042 struct DBusSocketSetClass {
00043 void (*free) (DBusSocketSet *self);
00044 dbus_bool_t (*add) (DBusSocketSet *self,
00045 DBusPollable fd,
00046 unsigned int flags,
00047 dbus_bool_t enabled);
00048 void (*remove) (DBusSocketSet *self,
00049 DBusPollable fd);
00050 void (*enable) (DBusSocketSet *self,
00051 DBusPollable fd,
00052 unsigned int flags);
00053 void (*disable) (DBusSocketSet *self,
00054 DBusPollable fd);
00055 int (*poll) (DBusSocketSet *self,
00056 DBusSocketEvent *revents,
00057 int max_events,
00058 int timeout_ms);
00059 };
00060
00061 struct DBusSocketSet {
00062 DBusSocketSetClass *cls;
00063 };
00064
00065 DBusSocketSet *_dbus_socket_set_new (int size_hint);
00066
00067 static inline void
00068 _dbus_socket_set_free (DBusSocketSet *self)
00069 {
00070 (self->cls->free) (self);
00071 }
00072
00073 static inline dbus_bool_t
00074 _dbus_socket_set_add (DBusSocketSet *self,
00075 DBusPollable fd,
00076 unsigned int flags,
00077 dbus_bool_t enabled)
00078 {
00079 return (self->cls->add) (self, fd, flags, enabled);
00080 }
00081
00082 static inline void
00083 _dbus_socket_set_remove (DBusSocketSet *self,
00084 DBusPollable fd)
00085 {
00086 (self->cls->remove) (self, fd);
00087 }
00088
00089 static inline void
00090 _dbus_socket_set_enable (DBusSocketSet *self,
00091 DBusPollable fd,
00092 unsigned int flags)
00093 {
00094 (self->cls->enable) (self, fd, flags);
00095 }
00096
00097 static inline void
00098 _dbus_socket_set_disable (DBusSocketSet *self,
00099 DBusPollable fd)
00100 {
00101 (self->cls->disable) (self, fd);
00102 }
00103
00104
00105 static inline int
00106 _dbus_socket_set_poll (DBusSocketSet *self,
00107 DBusSocketEvent *revents,
00108 int max_events,
00109 int timeout_ms)
00110 {
00111 return (self->cls->poll) (self, revents, max_events, timeout_ms);
00112 }
00113
00114
00115
00116 extern DBusSocketSetClass _dbus_socket_set_poll_class;
00117 extern DBusSocketSetClass _dbus_socket_set_epoll_class;
00118
00119 DBusSocketSet *_dbus_socket_set_poll_new (int size_hint);
00120 DBusSocketSet *_dbus_socket_set_epoll_new (void);
00121
00122 #endif
00123 #endif