| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/private/fdiodispatcher.h
- // Purpose: classes for dispatching IO notifications for file descriptors
- // Authors: Lukasz Michalski
- // Created: December 2006
- // Copyright: (c) Lukasz Michalski
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_PRIVATE_FDIODISPATCHER_H_
- #define _WX_PRIVATE_FDIODISPATCHER_H_
- #include "wx/hashmap.h"
- #include "wx/private/fdiohandler.h"
- // 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
- };
- // base class for wxSelectDispatcher and wxEpollDispatcher
- class WXDLLIMPEXP_BASE wxFDIODispatcher
- {
- public:
- enum { TIMEOUT_INFINITE = -1 };
- // return the global dispatcher to be used for IO events, can be NULL only
- // if wxSelectDispatcher wasn't compiled into the library at all as
- // creating it never fails
- //
- // don't delete the returned pointer
- static wxFDIODispatcher *Get();
- // if we have any registered handlers, check for any pending events to them
- // and dispatch them -- this is used from wxX11 and wxDFB event loops
- // implementation
- static void DispatchPending();
- // 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()
- virtual bool UnregisterFD(int fd) = 0;
- // check if any events are currently available without dispatching them
- virtual bool HasPending() const = 0;
- // wait for an event for at most timeout milliseconds and process it;
- // return the number of events processed (possibly 0 if timeout expired) or
- // -1 if an error occurred
- virtual int Dispatch(int timeout = TIMEOUT_INFINITE) = 0;
- virtual ~wxFDIODispatcher() { }
- };
- //entry for wxFDIOHandlerMap
- 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
- );
- // FDIODispatcher that holds map fd <-> FDIOHandler, this should be used if
- // this map isn't maintained elsewhere already as it is usually needed anyhow
- //
- // notice that all functions for FD management have implementation
- // in the base class and should be called from the derived classes
- class WXDLLIMPEXP_BASE wxMappedFDIODispatcher : public wxFDIODispatcher
- {
- public:
- // 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);
- // modify descriptor flags or handler, return true on success
- virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags);
- // unregister descriptor previously registered with RegisterFD()
- virtual bool UnregisterFD(int fd);
- virtual ~wxMappedFDIODispatcher() { }
- protected:
- // the fd -> handler map containing all the registered handlers
- wxFDIOHandlerMap m_handlers;
- };
- #endif // _WX_PRIVATE_FDIODISPATCHER_H_
|