X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Ftimer.cc;h=b5c55ff528f6f3c6205afbb128a8615acc882f09;hp=273625640ab4a78dedfda47a691981972a98d7cf;hb=449366f5f32d24f2a2a6589da6e16b2bf0d61773;hpb=831f04d4bc19a390415ac0bbac4331c7a65509bc diff --git a/src/moof/timer.cc b/src/moof/timer.cc index 2736256..b5c55ff 100644 --- a/src/moof/timer.cc +++ b/src/moof/timer.cc @@ -9,25 +9,23 @@ * **************************************************************************/ +#include "../config.h" + #include #include #include #include -#include "log.hh" +#include "debug.hh" #include "timer.hh" -#if HAVE_CONFIG_H -#include "config.h" -#endif - namespace moof { -scalar timer::gNextFire = std::numeric_limits::max(); -std::map timer::gTimers; +scalar timer::next_expiration_ = std::numeric_limits::max(); +hash timer::timers_; unsigned timer::new_identifier() @@ -58,9 +56,9 @@ void timer::init(const function& function, scalar seconds, mode mode) } id_ = new_identifier(); - gTimers.insert(std::pair(id_, this)); + timers_.insert(std::pair(id_, this)); - if (absolute_ < gNextFire) gNextFire = absolute_; + if (absolute_ < next_expiration_) next_expiration_ = absolute_; } } @@ -74,10 +72,13 @@ void timer::invalidate() { if (mode_ != invalid) { - gTimers.erase(id_); + timers_.erase(id_); mode_ = invalid; - if (is_equal(absolute_, gNextFire)) gNextFire = find_next_expiration(); + if (is_equal(absolute_, next_expiration_)) + { + next_expiration_ = find_next_expiration(); + } } } @@ -95,7 +96,10 @@ void timer::fire() if (is_equal(absolute_, t, 1.0)) absolute_ += interval_; else absolute_ = interval_ + t; - if (is_equal(absolute, gNextFire)) gNextFire = find_next_expiration(); + if (is_equal(absolute, next_expiration_)) + { + next_expiration_ = find_next_expiration(); + } } else { @@ -106,16 +110,16 @@ void timer::fire() scalar timer::find_next_expiration() { - std::map::iterator it; - scalar nextFire = std::numeric_limits::max(); + scalar next_fire = std::numeric_limits::max(); - for (it = gTimers.begin(); it != gTimers.end(); ++it) + hash::iterator it; + for (it = timers_.begin(); it != timers_.end(); ++it) { scalar absolute = (*it).second->absolute_; - if (absolute < nextFire) nextFire = absolute; + if (absolute < next_fire) next_fire = absolute; } - return nextFire; + return next_fire; } @@ -142,11 +146,10 @@ void timer::fire_expired_timers() void timer::fire_expired_timers(scalar t) { - std::map::iterator it; - - if (gNextFire > t) return; + if (next_expiration_ > t) return; - for (it = gTimers.begin(); it != gTimers.end(); ++it) + hash::iterator it; + for (it = timers_.begin(); it != timers_.end(); ++it) { timer* timer = (*it).second; if (timer->is_expired()) timer->fire(); @@ -175,7 +178,7 @@ static time_t set_reference() return ts.tv_sec; } -static const time_t reference = set_reference(); +static const time_t reference_ = set_reference(); scalar timer::ticks() @@ -185,7 +188,7 @@ scalar timer::ticks() int result = clock_gettime(CLOCK_MONOTONIC, &ts); ASSERT(result == 0 && "cannot access clock"); - return scalar(ts.tv_sec - reference) + + return scalar(ts.tv_sec - reference_) + scalar(ts.tv_nsec) / 1000000000.0; } @@ -211,7 +214,7 @@ void timer::sleep(scalar seconds, mode mode) // If we don't have posix timers, we'll have to use a different timing // method. SDL only promises centisecond accuracy, but that's better than -// a kick in the pants. +// a kick in the pants. scalar timer::ticks() {