Chris@16: // Copyright (C) 2001-2003 Chris@16: // William E. Kempf Chris@16: // Copyright (C) 2007-8 Anthony Williams Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_XTIME_WEK070601_HPP Chris@16: #define BOOST_XTIME_WEK070601_HPP Chris@16: Chris@16: #include Chris@16: #if defined BOOST_THREAD_USES_DATETIME Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: enum xtime_clock_types Chris@16: { Chris@16: TIME_UTC_=1 Chris@16: // TIME_TAI, Chris@16: // TIME_MONOTONIC, Chris@16: // TIME_PROCESS, Chris@16: // TIME_THREAD, Chris@16: // TIME_LOCAL, Chris@16: // TIME_SYNC, Chris@16: // TIME_RESOLUTION Chris@16: }; Chris@16: Chris@16: struct xtime Chris@16: { Chris@16: #if defined(BOOST_NO_INT64_T) Chris@16: typedef int_fast32_t xtime_sec_t; //INT_FAST32_MIN <= sec <= INT_FAST32_MAX Chris@16: #else Chris@16: typedef int_fast64_t xtime_sec_t; //INT_FAST64_MIN <= sec <= INT_FAST64_MAX Chris@16: #endif Chris@16: Chris@16: typedef int_fast32_t xtime_nsec_t; //0 <= xtime.nsec < NANOSECONDS_PER_SECOND Chris@16: Chris@16: xtime_sec_t sec; Chris@16: xtime_nsec_t nsec; Chris@16: Chris@16: operator system_time() const Chris@16: { Chris@16: return boost::posix_time::from_time_t(0)+ Chris@16: boost::posix_time::seconds(static_cast(sec))+ Chris@16: #ifdef BOOST_DATE_TIME_HAS_NANOSECONDS Chris@16: boost::posix_time::nanoseconds(nsec); Chris@16: #else Chris@16: boost::posix_time::microseconds((nsec+500)/1000); Chris@16: #endif Chris@16: } Chris@16: Chris@16: }; Chris@16: Chris@16: inline xtime get_xtime(boost::system_time const& abs_time) Chris@16: { Chris@16: xtime res; Chris@16: boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0); Chris@16: Chris@16: res.sec=static_cast(time_since_epoch.total_seconds()); Chris@16: res.nsec=static_cast(time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second())); Chris@16: return res; Chris@16: } Chris@16: Chris@16: inline int xtime_get(struct xtime* xtp, int clock_type) Chris@16: { Chris@16: if (clock_type == TIME_UTC_) Chris@16: { Chris@16: *xtp=get_xtime(get_system_time()); Chris@16: return clock_type; Chris@16: } Chris@16: return 0; Chris@16: } Chris@16: Chris@16: Chris@16: inline int xtime_cmp(const xtime& xt1, const xtime& xt2) Chris@16: { Chris@16: if (xt1.sec == xt2.sec) Chris@16: return (int)(xt1.nsec - xt2.nsec); Chris@16: else Chris@16: return (xt1.sec > xt2.sec) ? 1 : -1; Chris@16: } Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #include Chris@16: #endif Chris@16: #endif //BOOST_XTIME_WEK070601_HPP