]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fdiodispatcher.cpp
Pass length including the null-terminator to cWC2MB
[wxWidgets.git] / src / common / fdiodispatcher.cpp
index 112f892dc29a71de032e4f0199e233fd1ddc37f0..f5264871305bad3a612f8d7e1c65a834d7dece28 100644 (file)
 #endif
 
 #ifndef WX_PRECOMP
+    #include "wx/module.h"
 #endif //WX_PRECOMP
 
 #include "wx/private/fdiodispatcher.h"
 
+#include "wx/private/selectdispatcher.h"
+#ifdef __UNIX__
+    #include "wx/unix/private/epolldispatcher.h"
+#endif
+
+wxFDIODispatcher *gs_dispatcher = NULL;
+
 // ============================================================================
 // implementation
 // ============================================================================
 
+// ----------------------------------------------------------------------------
+// wxFDIODispatcher
+// ----------------------------------------------------------------------------
+
+/* static */
+wxFDIODispatcher *wxFDIODispatcher::Get()
+{
+    if ( !gs_dispatcher )
+    {
+#if wxUSE_EPOLL_DISPATCHER
+        gs_dispatcher = wxEpollDispatcher::Create();
+        if ( !gs_dispatcher )
+#endif // wxUSE_EPOLL_DISPATCHER
+#if wxUSE_SELECT_DISPATCHER
+            gs_dispatcher = wxSelectDispatcher::Create();
+#endif // wxUSE_WCHAR_T
+    }
+
+    wxASSERT_MSG( gs_dispatcher, _T("failed to create any IO dispatchers") );
+
+    return gs_dispatcher;
+}
+
+/* static */
+void wxFDIODispatcher::DispatchPending()
+{
+    if ( gs_dispatcher )
+        gs_dispatcher->Dispatch(0);
+}
+
+// ----------------------------------------------------------------------------
+// wxMappedFDIODispatcher
+// ----------------------------------------------------------------------------
+
 wxFDIOHandler *wxMappedFDIODispatcher::FindHandler(int fd) const
 {
     const wxFDIOHandlerMap::const_iterator it = m_handlers.find(fd);
@@ -89,3 +131,18 @@ bool wxMappedFDIODispatcher::UnregisterFD(int fd)
     return true;
 }
 
+// ----------------------------------------------------------------------------
+// wxSelectDispatcherModule
+// ----------------------------------------------------------------------------
+
+class wxFDIODispatcherModule : public wxModule
+{
+public:
+    virtual bool OnInit() { return true; }
+    virtual void OnExit() { wxDELETE(gs_dispatcher); }
+
+private:
+    DECLARE_DYNAMIC_CLASS(wxFDIODispatcherModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxFDIODispatcherModule, wxModule)