X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FClockService.cc;h=7754f4c2380efe67f3b4532bc2720025e23b9162;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=d9733d8e8d67527df34df478c9ad695f9b3a597e;hpb=c6811d4b2fdd60eb33af627ae287dd228f435d14;p=senf.git diff --git a/Scheduler/ClockService.cc b/Scheduler/ClockService.cc index d9733d8..7754f4c 100644 --- a/Scheduler/ClockService.cc +++ b/Scheduler/ClockService.cc @@ -27,16 +27,64 @@ //#include "ClockService.ih" // Custom includes -#include -#include -#include -#include -#include "../Utils/Exception.hh" +#include +#include "../Utils/Console/Console.hh" //#include "ClockService.mpp" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// +prefix_ void +senf::parseClockServiceInterval(console::ParseCommandInfo::TokensRange const & tokens, + ClockService::clock_type & out) +{ + out = 0; + std::string value; + { + senf::console::CheckedArgumentIteratorWrapper arg (tokens); + senf::console::parse( *(arg++), value ); + } + static boost::sregex_iterator::regex_type rx ("[mun]?[dhms]"); + boost::sregex_iterator i (value.begin(), value.end(), rx); + boost::sregex_iterator const i_end; + std::string::const_iterator j (value.begin()); + for (; i != i_end; ++i) { + boost::sregex_iterator::value_type::value_type match ((*i)[0]); + long double v (boost::lexical_cast(std::string(j, match.first))); + char scale (0); + char unit (0); + if (match.length() == 2) { + scale = *match.first; + unit = *boost::next(match.first); + } else { + SENF_ASSERT( match.length() == 1); + unit = *match.first; + } + switch (scale) { + case 0: break; + case 'n': v /= 1000.0; + case 'u': v /= 1000.0; + case 'm': v /= 1000.0; + } + switch (unit) { + case 'd': v *= 24.0; + case 'h': v *= 60.0; + case 'm': v *= 60.0; + case 's': v *= 1000000000.0; + } + out += senf::ClockService::nanoseconds(senf::ClockService::int64_type(v)); + j = match.second; + } + if (j != value.end()) + throw senf::console::SyntaxErrorException(); +} + +prefix_ void senf::formatClockServiceInterval(ClockService::clock_type interval, + std::ostream & os) +{ + os << interval << "ns"; +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "ClockService.mpp"