summaryrefslogtreecommitdiff
path: root/otk/timer.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-21 18:42:39 +0000
committerDana Jansens <danakj@orodu.net>2003-03-21 18:42:39 +0000
commita52a6d96d701c993896f276e4198003317632aaf (patch)
treebe2f51e6a433d1fdf9a7c8248b343cb3f6297212 /otk/timer.cc
parenta36c7543d4eedaa9e10bfd9f4d9b81279b1bb7e6 (diff)
rm the old code including the .pys and the c++ shit
Diffstat (limited to 'otk/timer.cc')
-rw-r--r--otk/timer.cc145
1 files changed, 0 insertions, 145 deletions
diff --git a/otk/timer.cc b/otk/timer.cc
deleted file mode 100644
index 0a008314..00000000
--- a/otk/timer.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
-
-#include "config.h"
-
-#include "timer.hh"
-#include "display.hh"
-
-extern "C" {
-#ifdef HAVE_SYS_SELECT_H
-# include <sys/select.h>
-#endif // HAVE_SYS_SELECT_H
-
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-}
-
-namespace otk {
-
-timeval Timer::_nearest_timeout, Timer::_now;
-Timer::TimerQ Timer::_q;
-
-void Timer::timevalAdd(timeval &a, long msec)
-{
- a.tv_sec += msec / 1000;
- a.tv_usec += (msec % 1000) * 1000;
- a.tv_sec += a.tv_usec / 1000000;
- a.tv_usec %= 1000000;
-}
-
-bool Timer::nearestTimeout(struct timeval &tm)
-{
- if (_q.empty())
- return false;
- tm.tv_sec = _nearest_timeout.tv_sec - _now.tv_sec;
- tm.tv_usec = _nearest_timeout.tv_usec - _now.tv_usec;
-
- while (tm.tv_usec < 0) {
- tm.tv_usec += 1000000;
- tm.tv_sec--;
- }
- tm.tv_sec += tm.tv_usec / 1000000;
- tm.tv_usec %= 1000000;
- if (tm.tv_sec < 0)
- tm.tv_sec = 0;
-
- return true;
-}
-
-void Timer::dispatchTimers(bool wait)
-{
- fd_set selset;
- int fd;
- timeval next;
- Timer *curr;
-
- gettimeofday(&_now, NULL);
- _nearest_timeout = _now;
- _nearest_timeout.tv_sec += 10000;
-
- while (!_q.empty()) {
- curr = _q.top();
- /* since we overload the destructor to keep from removing from the middle
- of the priority queue, set _del_me, we have to do our real delete in
- here.
- */
- if (curr->_del_me) {
- _q.pop();
- realDelete(curr);
- continue;
- }
-
- // the queue is sorted, so if this timer shouldn't fire, none are ready
- _nearest_timeout = curr->_timeout;
- if (!timercmp(&_now, &_nearest_timeout, >))
- break;
-
- /* we set the last fired time to delay msec after the previous firing, then
- re-insert. timers maintain their order and may trigger more than once
- if they've waited more than one delay's worth of time.
- */
- _q.pop();
- timevalAdd(curr->_last, curr->_delay);
- curr->_action(curr->_data);
- timevalAdd(curr->_timeout, curr->_delay);
- _q.push(curr);
-
- /* if at least one timer fires, then don't wait on X events, as there may
- already be some in the queue from the timer callbacks.
- */
- wait = false;
- }
-
- if (wait) {
- // wait for the nearest trigger, or for X to do something interesting
- fd = ConnectionNumber(**display);
- FD_ZERO(&selset);
- FD_SET(fd, &selset);
- if (nearestTimeout(next)) {
- select(fd + 1, &selset, NULL, NULL, &next);
- } else
- select(fd + 1, &selset, NULL, NULL, NULL);
- }
-}
-
-Timer::Timer(long delay, Timer::TimeoutHandler action, void *data)
- : _delay(delay),
- _action(action),
- _data(data),
- _del_me(false),
- _last(_now),
- _timeout(_now)
-{
- timevalAdd(_timeout, delay);
- _q.push(this);
-}
-
-void Timer::operator delete(void *self)
-{
- Timer *t;
- t = (Timer *)self;
- t->_del_me = true;
-}
-
-void Timer::realDelete(Timer *me)
-{
- ::delete me;
-}
-
-void Timer::initialize(void)
-{
- gettimeofday(&_now, NULL);
- _nearest_timeout.tv_sec = 100000;
- _nearest_timeout.tv_usec = 0;
-}
-
-void Timer::destroy(void)
-{
- while(!_q.empty()) {
- realDelete(_q.top());
- _q.pop();
- }
-}
-
-}