--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/private/fdiodispatcher.h
+// Purpose: classes for dispatching IO notifications for file descriptors
+// Authors: Lukasz Michalski
+// Created: December 2006
+// Copyright: (c) Lukasz Michalski
+// RCS-ID: $Id$
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PRIVATE_FDIODISPATCHER_H_
+#define _WX_PRIVATE_FDIODISPATCHER_H_
+
+#include "wx/hashmap.h"
+
+// handler used to process events on descriptors
+class wxFDIOHandler
+{
+public:
+ // called when descriptor is available for non-blocking read
+ virtual void OnReadWaiting() = 0;
+
+ // called when descriptor is available for non-blocking write
+ virtual void OnWriteWaiting() = 0;
+
+ // called when there is exception on descriptor
+ virtual void OnExceptionWaiting() = 0;
+
+ // virtual dtor for the base class
+ virtual ~wxFDIOHandler() { }
+};
+
+// those flags describes sets where descriptor should be added
+enum wxFDIODispatcherEntryFlags
+{
+ wxFDIO_INPUT = 1,
+ wxFDIO_OUTPUT = 2,
+ wxFDIO_EXCEPTION = 4,
+ wxFDIO_ALL = wxFDIO_INPUT | wxFDIO_OUTPUT | wxFDIO_EXCEPTION
+};
+
+struct wxFDIOHandlerEntry
+{
+ wxFDIOHandlerEntry()
+ {
+ }
+
+ wxFDIOHandlerEntry(wxFDIOHandler *handler_, int flags_)
+ : handler(handler_),
+ flags(flags_)
+ {
+ }
+
+ wxFDIOHandler *handler;
+ int flags;
+};
+
+// this hash is used to map file descriptors to their handlers
+WX_DECLARE_HASH_MAP(
+ int,
+ wxFDIOHandlerEntry,
+ wxIntegerHash,
+ wxIntegerEqual,
+ wxFDIOHandlerMap
+);
+
+// base class for wxSelectDispatcher and wxEpollDispatcher
+//
+// notice that all pure virtual functions for FD management have implementation
+// in the base class and should be called from the derived classes
+class WXDLLIMPEXP_BASE wxFDIODispatcher
+{
+public:
+ enum { TIMEOUT_INFINITE = -1 };
+
+ // find the handler for the given fd, return NULL if none
+ wxFDIOHandler *FindHandler(int fd) const;
+
+ // register handler for the given descriptor with the dispatcher, return
+ // true on success or false on error
+ virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags) = 0;
+
+ // modify descriptor flags or handler, return true on success
+ virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags) = 0;
+
+ // unregister descriptor previously registered with RegisterFD(), the
+ // caller is responsible for deleting the returned handler pointer if
+ // necessary
+ virtual wxFDIOHandler *UnregisterFD(int fd, int flags) = 0;
+
+ // loops waiting for an event to happen on any of the descriptors
+ virtual void RunLoop(int timeout) = 0;
+
+ virtual ~wxFDIODispatcher() { }
+
+protected:
+ // the fd -> handler map containing all the registered handlers
+ wxFDIOHandlerMap m_handlers;
+};
+
+#endif // _WX_PRIVATE_FDIODISPATCHER_H_