]> git.saurik.com Git - wxWidgets.git/commitdiff
factor out the fd<->handlers map from wxFDIODispatcher into a separate wxMappedFDIODi...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Jun 2007 13:51:05 +0000 (13:51 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Jun 2007 13:51:05 +0000 (13:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46274 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/private/fdiodispatcher.h
include/wx/private/selectdispatcher.h
include/wx/unix/private/epolldispatcher.h
src/common/fdiodispatcher.cpp
src/common/selectdispatcher.cpp
src/unix/epolldispatcher.cpp

index 26b5164a5915f19842059fe6df8c28b9bcf7001d..0f71d94fd67dcc4c3328aa5803bba850e20f3e3c 100644 (file)
@@ -39,6 +39,31 @@ enum wxFDIODispatcherEntryFlags
     wxFDIO_ALL = wxFDIO_INPUT | wxFDIO_OUTPUT | wxFDIO_EXCEPTION
 };
 
+// base class for wxSelectDispatcher and wxEpollDispatcher
+class WXDLLIMPEXP_BASE wxFDIODispatcher
+{
+public:
+    enum { TIMEOUT_INFINITE = -1 };
+
+    // 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 bool 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() { }
+};
+
+//entry for wxFDIOHandlerMap
 struct wxFDIOHandlerEntry
 {
     wxFDIOHandlerEntry()
@@ -64,34 +89,28 @@ WX_DECLARE_HASH_MAP(
   wxFDIOHandlerMap
 );
 
-// base class for wxSelectDispatcher and wxEpollDispatcher
+// 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 pure virtual functions for FD management have implementation
+// notice that all functions for FD management have implementation
 // in the base class and should be called from the derived classes
-class WXDLLIMPEXP_BASE wxFDIODispatcher
-{
+class WXDLLIMPEXP_BASE wxMappedFDIODispatcher : public 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;
+    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) = 0;
+    virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags);
 
     // 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;
+    virtual bool UnregisterFD(int fd, int flags);
 
-    // loops waiting for an event to happen on any of the descriptors
-    virtual void RunLoop(int timeout) = 0;
-
-    virtual ~wxFDIODispatcher() { }
+    virtual ~wxMappedFDIODispatcher() { }
 
 protected:
     // the fd -> handler map containing all the registered handlers
index 2633b4de48832bacb9c34d90c54c892bdd97fc8c..b444c23d8c1649df1e3aa00740ed70e8c493e34c 100644 (file)
@@ -71,7 +71,7 @@ private:
     static Callback ms_handlers[Max];
 };
 
-class WXDLLIMPEXP_BASE wxSelectDispatcher : public wxFDIODispatcher
+class WXDLLIMPEXP_BASE wxSelectDispatcher : public wxMappedFDIODispatcher
 {
 public:
     // returns the unique instance of this class, the pointer shouldn't be
@@ -86,7 +86,7 @@ public:
     // implement pure virtual methods of the base class
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
-    virtual wxFDIOHandler *UnregisterFD(int fd, int flags = wxFDIO_ALL);
+    virtual bool UnregisterFD(int fd, int flags = wxFDIO_ALL);
     virtual void RunLoop(int timeout = TIMEOUT_INFINITE);
 
 protected:
index 0b4079463e1dabfca3ddaf2a92b826e5615bf4a0..ef67a1520bd20d770867610b812532cf8f430613 100644 (file)
@@ -29,7 +29,7 @@ public:
     // implement base class pure virtual methods
     virtual bool RegisterFD(int fd, wxFDIOHandler* handler, int flags = wxFDIO_ALL);
     virtual bool ModifyFD(int fd, wxFDIOHandler* handler, int flags = wxFDIO_ALL);
-    virtual wxFDIOHandler *UnregisterFD(int fd, int flags = wxFDIO_ALL);
+    virtual bool UnregisterFD(int fd, int flags = wxFDIO_ALL);
     virtual void RunLoop(int timeout = TIMEOUT_INFINITE);
 
 private:
index 20fc9aca48e855d02ebf208c36bf9e4b22057b16..f2e54e3036d10f8fcd5e22d014d72fc8fff39897 100644 (file)
@@ -32,7 +32,7 @@
 // implementation
 // ============================================================================
 
-wxFDIOHandler *wxFDIODispatcher::FindHandler(int fd) const
+wxFDIOHandler *wxMappedFDIODispatcher::FindHandler(int fd) const
 {
     const wxFDIOHandlerMap::const_iterator it = m_handlers.find(fd);
 
@@ -40,7 +40,7 @@ wxFDIOHandler *wxFDIODispatcher::FindHandler(int fd) const
 }
 
 
-bool wxFDIODispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
+bool wxMappedFDIODispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
 {
     wxUnusedVar(flags);
 
@@ -63,7 +63,7 @@ bool wxFDIODispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
     return true;
 }
 
-bool wxFDIODispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
+bool wxMappedFDIODispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
 {
     wxUnusedVar(flags);
 
@@ -78,13 +78,12 @@ bool wxFDIODispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
     return true;
 }
 
-wxFDIOHandler *wxFDIODispatcher::UnregisterFD(int fd, int flags)
+bool wxMappedFDIODispatcher::UnregisterFD(int fd, int flags)
 {
     wxFDIOHandlerMap::iterator i = m_handlers.find(fd);
-    wxCHECK_MSG( i != m_handlers.end(), NULL,
-                    _T("unregistering unregistered handler?") );
+    if( i == m_handlers.end())
+      return false;
 
-    wxFDIOHandler * const handler = i->second.handler;
     i->second.flags &= ~flags;
     if ( !i->second.flags )
     {
@@ -92,6 +91,6 @@ wxFDIOHandler *wxFDIODispatcher::UnregisterFD(int fd, int flags)
         m_handlers.erase(i);
     }
 
-    return handler;
+    return true;
 }
 
index ccb19b54f6714a6b48ad674fcc72594003328304..2a96b334535d11feb1aa9cd92bbe1da7fbdbf043 100644 (file)
@@ -160,7 +160,7 @@ wxSelectDispatcher::wxSelectDispatcher()
 
 bool wxSelectDispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
 {
-    if ( !wxFDIODispatcher::RegisterFD(fd, handler, flags) )
+    if ( !wxMappedFDIODispatcher::RegisterFD(fd, handler, flags) )
         return false;
 
     if ( !m_sets.SetFD(fd, flags) )
@@ -174,7 +174,7 @@ bool wxSelectDispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
 
 bool wxSelectDispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
 {
-    if ( !wxFDIODispatcher::ModifyFD(fd, handler, flags) )
+    if ( !wxMappedFDIODispatcher::ModifyFD(fd, handler, flags) )
         return false;
 
     wxASSERT_MSG( fd <= m_maxFD, _T("logic error: registered fd > m_maxFD?") );
@@ -182,10 +182,8 @@ bool wxSelectDispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
     return m_sets.SetFD(fd, flags);
 }
 
-wxFDIOHandler *wxSelectDispatcher::UnregisterFD(int fd, int flags)
+bool wxSelectDispatcher::UnregisterFD(int fd, int flags)
 {
-    wxFDIOHandler * const handler = wxFDIODispatcher::UnregisterFD(fd, flags);
-
     m_sets.ClearFD(fd, flags);
 
     // remove the handler if we don't need it any more
@@ -205,7 +203,7 @@ wxFDIOHandler *wxSelectDispatcher::UnregisterFD(int fd, int flags)
         }
     }
 
-    return handler;
+    return true;
 }
 
 void wxSelectDispatcher::ProcessSets(const wxSelectSets& sets)
index 294f89f1cbc428552a4c1d192008f3656f1aa15b..533d15b45a60f9f7388c7047b46b783929e6a9ad 100644 (file)
@@ -86,9 +86,6 @@ wxEpollDispatcher::wxEpollDispatcher()
 
 bool wxEpollDispatcher::RegisterFD(int fd, wxFDIOHandler* handler, int flags)
 {
-    if ( !wxFDIODispatcher::RegisterFD(fd, handler, flags) )
-        return false;
-
     epoll_event ev;
     ev.events = GetEpollMask(flags, fd);
     ev.data.ptr = handler;
@@ -107,9 +104,6 @@ bool wxEpollDispatcher::RegisterFD(int fd, wxFDIOHandler* handler, int flags)
 
 bool wxEpollDispatcher::ModifyFD(int fd, wxFDIOHandler* handler, int flags)
 {
-    if ( !wxFDIODispatcher::ModifyFD(fd, handler, flags) )
-        return false;
-
     epoll_event ev;
     ev.events = GetEpollMask(flags, fd);
     ev.data.ptr = handler;
@@ -126,12 +120,8 @@ bool wxEpollDispatcher::ModifyFD(int fd, wxFDIOHandler* handler, int flags)
     return true;
 }
 
-wxFDIOHandler *wxEpollDispatcher::UnregisterFD(int fd, int flags)
+bool wxEpollDispatcher::UnregisterFD(int fd, int flags)
 {
-    wxFDIOHandler * const handler = wxFDIODispatcher::UnregisterFD(fd, flags);
-    if ( !handler )
-        return NULL;
-
     epoll_event ev;
     ev.events = 0;
     ev.data.ptr = NULL;
@@ -142,7 +132,7 @@ wxFDIOHandler *wxEpollDispatcher::UnregisterFD(int fd, int flags)
                       fd, m_epollDescriptor);
     }
 
-    return handler;
+    return true;
 }
 
 void wxEpollDispatcher::RunLoop(int timeout)