f8a565eb0c82b7b65757f40ab3775075067aaca5
[senf.git] / Scheduler / Scheduler.cci
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Stefan Bund <g0dil@berlios.de>
7 //
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
23 /** \file
24     \brief Scheduler inline non-template implementation
25  */
26
27 //#include "Scheduler.ih"
28
29 // Custom includes
30 #include <boost/format.hpp>
31
32 #define prefix_ inline
33 ///////////////////////////////cci.p///////////////////////////////////////
34
35 // private members
36
37 prefix_ void senf::Scheduler::do_add(int fd, FdCallback const & cb, int eventMask)
38 {
39     do_add((boost::format("<anon fd %d>") % fd).str(), fd, cb, eventMask);
40 }
41
42 prefix_ void senf::Scheduler::do_add(std::string const & name, int fd, FdCallback const & cb,
43                                      int eventMask)
44 {
45     if (! fdDispatcher_.add(name, fd, cb, eventMask))
46         fileDispatcher_.add(name, fd, cb, eventMask);
47 }
48
49 prefix_ void senf::Scheduler::do_remove(int fd, int eventMask)
50 {
51     // We don't know, where the descriptor is registered. However, this is no problem since removing
52     // a non-registered fd is a no-opp
53     fdDispatcher_.remove(fd, eventMask);
54     fileDispatcher_.remove(fd, eventMask);
55 }
56
57 // public members
58
59 prefix_ senf::Scheduler::Scheduler & senf::Scheduler::instance()
60 {
61     static Scheduler instance;
62     return instance;
63 }
64
65 prefix_ int senf::retrieve_filehandle(int fd)
66 {
67     return fd;
68 }
69
70 prefix_ senf::Scheduler::timer_id senf::Scheduler::timeout(ClockService::clock_type timeout,
71                                                            SimpleCallback const & cb)
72 {
73     return timerDispatcher_.add("<anon timer>", timeout, cb);
74 }
75
76 prefix_ senf::Scheduler::timer_id senf::Scheduler::timeout(std::string const & name,
77                                                            ClockService::clock_type timeout,
78                                                            SimpleCallback const & cb)
79 {
80     return timerDispatcher_.add(name, timeout, cb);
81 }
82
83 prefix_ void senf::Scheduler::cancelTimeout(timer_id id)
84 {
85     timerDispatcher_.remove(id);
86 }
87
88 prefix_ senf::ClockService::clock_type senf::Scheduler::timeoutEarly()
89     const
90 {
91     SENF_LOG( (senf::log::IMPORTANT) 
92               ("timeoutEarly() is deprecated and a no-op. It will be removed") );
93     return 0;
94 }
95
96 prefix_ void senf::Scheduler::timeoutEarly(ClockService::clock_type v)
97 {
98     SENF_LOG( (senf::log::IMPORTANT) 
99               ("timeoutEarly() is deprecated and a no-op. It will be removed") );
100 }
101
102 prefix_ senf::ClockService::clock_type senf::Scheduler::timeoutAdjust()
103     const
104 {
105     SENF_LOG( (senf::log::IMPORTANT) 
106               ("timeoutAdjust() is deprecated and a no-op. It will be removed") );
107     return 0;
108 }
109
110 prefix_ void senf::Scheduler::timeoutAdjust(ClockService::clock_type v)
111 {
112     SENF_LOG( (senf::log::IMPORTANT) 
113               ("timeoutAdjust() is deprecated and a no-op. It will be removed") );
114 }
115
116 prefix_ void senf::Scheduler::registerSignal(unsigned signal, SignalCallback const & cb)
117 {
118     signalDispatcher_.add(signal, cb);
119 }
120
121 prefix_ void senf::Scheduler::unregisterSignal(unsigned signal)
122 {
123     signalDispatcher_.remove(signal);
124 }
125
126 prefix_ void senf::Scheduler::terminate()
127 {
128     terminate_ = true;
129 }
130
131 prefix_ senf::ClockService::clock_type senf::Scheduler::eventTime()
132     const
133 {
134     return manager_.eventTime();
135 }
136
137 prefix_ unsigned senf::Scheduler::hangCount()
138     const
139 {
140     return runner_.hangCount();
141 }
142
143 prefix_ senf::Scheduler::Scheduler()
144     : terminate_ (false), 
145       fdDispatcher_ (manager_, runner_),
146       timerDispatcher_ (manager_, runner_),
147       signalDispatcher_ (manager_, runner_),
148       fileDispatcher_ (manager_, runner_)
149 {}
150
151 ///////////////////////////////cci.e///////////////////////////////////////
152 #undef prefix_
153
154 \f
155 // Local Variables:
156 // mode: c++
157 // fill-column: 100
158 // c-file-style: "senf"
159 // indent-tabs-mode: nil
160 // ispell-local-dictionary: "american"
161 // compile-command: "scons -u test"
162 // comment-column: 40
163 // End: