removed some useless spaces; not very important, I know :)
[senf.git] / Scheduler / Scheduler.hh
index 7696a64..0f16fce 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 //
 // Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-//     Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -37,7 +37,7 @@
 #include <boost/call_traits.hpp>
 #include <boost/integer.hpp>
 #include "ClockService.hh"
-#include "../Utils/Logger/Target.hh"
+#include "../Utils/Logger/SenfLog.hh"
 
 //#include "scheduler.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
@@ -153,11 +153,17 @@ namespace senf {
         wait for signals \e only.
 
         \todo Fix EventId parameter (probably to int) to allow |-ing without casting ...
+        
+        \todo Fix the file support to use threads (?) fork (?) and a pipe so it works reliably even
+            over e.g. NFS.
       */
     class Scheduler
         : boost::noncopyable
     {
     public:
+
+        SENF_LOG_CLASS_AREA();
+
         ///////////////////////////////////////////////////////////////////////////
         // Types
 
@@ -173,13 +179,14 @@ namespace senf {
             sole member is a typedef symbol defining the callback type given the handle type.
 
             The Callback is any callable object taking a \c Handle and an \c EventId as argument.
-        template <class Handle>
-        struct GenericCallback {
-            typedef boost::function<void (typename boost::call_traits<Handle>::param_type,
-                                          EventId) > Callback;
-        };
+            \code
+            template <class Handle>
+            struct GenericCallback {
+                typedef boost::function<void (typename boost::call_traits<Handle>::param_type,
+                                              EventId) > Callback;
+            };
+            \endcode
          */
-
         typedef boost::function<void (EventId)> FdCallback;
 
         /** \brief Callback type for timer events */
@@ -275,6 +282,7 @@ namespace senf {
         void unregisterSignal(unsigned signal);
                                         ///< Remove signal handler for \a signal
 
+        /// The signal number passed to registerSignal or unregisterSignal is invalid
         struct InvalidSignalNumberException : public std::exception
         { virtual char const * what() const throw() 
                 { return "senf::Scheduler::InvalidSignalNumberException"; } };
@@ -317,7 +325,11 @@ namespace senf {
             FdCallback cb_prio;
             FdCallback cb_write;
 
+            EventSpec() : file(false) {}
+
             int epollMask() const;
+
+            bool file;
         };
 
         /** \brief Timer event specification
@@ -341,6 +353,7 @@ namespace senf {
 
         typedef std::map<int,EventSpec> FdTable;
         typedef std::map<unsigned,TimerSpec> TimerMap; // sorted by id
+        typedef std::vector<unsigned> FdEraseList;
 
 #       ifndef DOXYGEN
 
@@ -361,6 +374,8 @@ namespace senf {
         typedef std::vector<SimpleCallback> SigHandlers;
 
         FdTable fdTable_;
+        FdEraseList fdErase_;
+        unsigned files_;
 
         unsigned timerIdCounter_;
         TimerQueue timerQueue_;