annotate DEPENDENCIES/generic/include/boost/chrono/process_cpu_clocks.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // boost/chrono/process_cpu_clocks.hpp -----------------------------------------------------------//
Chris@16 2
Chris@16 3 // Copyright 2009-2011 Vicente J. Botet Escriba
Chris@101 4 // Copyright (c) Microsoft Corporation 2014
Chris@16 5
Chris@16 6 // Distributed under the Boost Software License, Version 1.0.
Chris@16 7 // See http://www.boost.org/LICENSE_1_0.txt
Chris@16 8
Chris@16 9 // See http://www.boost.org/libs/system for documentation.
Chris@16 10
Chris@16 11 #ifndef BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP
Chris@16 12 #define BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP
Chris@16 13
Chris@16 14 #include <boost/chrono/config.hpp>
Chris@16 15
Chris@16 16
Chris@16 17 #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
Chris@16 18
Chris@16 19 #include <boost/chrono/duration.hpp>
Chris@16 20 #include <boost/chrono/time_point.hpp>
Chris@16 21 #include <boost/operators.hpp>
Chris@16 22 #include <boost/chrono/detail/system.hpp>
Chris@16 23 #include <iostream>
Chris@16 24 #include <boost/type_traits/common_type.hpp>
Chris@16 25 #include <boost/chrono/clock_string.hpp>
Chris@16 26
Chris@16 27 #ifndef BOOST_CHRONO_HEADER_ONLY
Chris@16 28 #include <boost/config/abi_prefix.hpp> // must be the last #include
Chris@16 29 #endif
Chris@16 30
Chris@16 31 namespace boost { namespace chrono {
Chris@16 32
Chris@16 33 class BOOST_CHRONO_DECL process_real_cpu_clock {
Chris@16 34 public:
Chris@16 35 typedef nanoseconds duration;
Chris@16 36 typedef duration::rep rep;
Chris@16 37 typedef duration::period period;
Chris@16 38 typedef chrono::time_point<process_real_cpu_clock> time_point;
Chris@16 39 BOOST_STATIC_CONSTEXPR bool is_steady = true;
Chris@16 40
Chris@16 41 static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
Chris@16 42 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
Chris@16 43 static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
Chris@16 44 #endif
Chris@16 45 };
Chris@16 46
Chris@101 47 #if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
Chris@16 48 class BOOST_CHRONO_DECL process_user_cpu_clock {
Chris@16 49 public:
Chris@16 50 typedef nanoseconds duration;
Chris@16 51 typedef duration::rep rep;
Chris@16 52 typedef duration::period period;
Chris@16 53 typedef chrono::time_point<process_user_cpu_clock> time_point;
Chris@16 54 BOOST_STATIC_CONSTEXPR bool is_steady = true;
Chris@16 55
Chris@16 56 static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
Chris@16 57 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
Chris@16 58 static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
Chris@16 59 #endif
Chris@16 60 };
Chris@16 61
Chris@16 62 class BOOST_CHRONO_DECL process_system_cpu_clock {
Chris@16 63 public:
Chris@16 64 typedef nanoseconds duration;
Chris@16 65 typedef duration::rep rep;
Chris@16 66 typedef duration::period period;
Chris@16 67 typedef chrono::time_point<process_system_cpu_clock> time_point;
Chris@16 68 BOOST_STATIC_CONSTEXPR bool is_steady = true;
Chris@16 69
Chris@16 70 static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
Chris@16 71 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
Chris@16 72 static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
Chris@16 73 #endif
Chris@16 74 };
Chris@101 75 #endif
Chris@16 76
Chris@16 77 template <typename Rep>
Chris@16 78 struct process_times
Chris@16 79 : arithmetic<process_times<Rep>,
Chris@16 80 multiplicative<process_times<Rep>, Rep,
Chris@16 81 less_than_comparable<process_times<Rep> > > >
Chris@16 82 {
Chris@16 83 //typedef process_real_cpu_clock::rep rep;
Chris@16 84 typedef Rep rep;
Chris@16 85 process_times()
Chris@16 86 : real(0)
Chris@16 87 , user(0)
Chris@16 88 , system(0){}
Chris@101 89
Chris@101 90 #if ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
Chris@16 91 template <typename Rep2>
Chris@16 92 explicit process_times(
Chris@16 93 Rep2 r)
Chris@16 94 : real(r)
Chris@16 95 , user(r)
Chris@16 96 , system(r){}
Chris@101 97 #endif
Chris@16 98 template <typename Rep2>
Chris@16 99 explicit process_times(
Chris@16 100 process_times<Rep2> const& rhs)
Chris@16 101 : real(rhs.real)
Chris@16 102 , user(rhs.user)
Chris@16 103 , system(rhs.system){}
Chris@16 104 process_times(
Chris@16 105 rep r,
Chris@16 106 rep u,
Chris@16 107 rep s)
Chris@16 108 : real(r)
Chris@16 109 , user(u)
Chris@16 110 , system(s){}
Chris@16 111
Chris@16 112 rep real; // real (i.e wall clock) time
Chris@16 113 rep user; // user cpu time
Chris@16 114 rep system; // system cpu time
Chris@16 115
Chris@101 116 #if ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
Chris@16 117 operator rep() const
Chris@16 118 {
Chris@16 119 return real;
Chris@16 120 }
Chris@101 121 #endif
Chris@16 122 template <typename Rep2>
Chris@16 123 bool operator==(process_times<Rep2> const& rhs) {
Chris@16 124 return (real==rhs.real &&
Chris@16 125 user==rhs.user &&
Chris@16 126 system==rhs.system);
Chris@16 127 }
Chris@16 128
Chris@16 129 process_times& operator+=(
Chris@16 130 process_times const& rhs)
Chris@16 131 {
Chris@16 132 real+=rhs.real;
Chris@16 133 user+=rhs.user;
Chris@16 134 system+=rhs.system;
Chris@16 135 return *this;
Chris@16 136 }
Chris@16 137 process_times& operator-=(
Chris@16 138 process_times const& rhs)
Chris@16 139 {
Chris@16 140 real-=rhs.real;
Chris@16 141 user-=rhs.user;
Chris@16 142 system-=rhs.system;
Chris@16 143 return *this;
Chris@16 144 }
Chris@16 145 process_times& operator*=(
Chris@16 146 process_times const& rhs)
Chris@16 147 {
Chris@16 148 real*=rhs.real;
Chris@16 149 user*=rhs.user;
Chris@16 150 system*=rhs.system;
Chris@16 151 return *this;
Chris@16 152 }
Chris@16 153 process_times& operator*=(rep const& rhs)
Chris@16 154 {
Chris@16 155 real*=rhs;
Chris@16 156 user*=rhs;
Chris@16 157 system*=rhs;
Chris@16 158 return *this;
Chris@16 159 }
Chris@16 160 process_times& operator/=(process_times const& rhs)
Chris@16 161 {
Chris@16 162 real/=rhs.real;
Chris@16 163 user/=rhs.user;
Chris@16 164 system/=rhs.system;
Chris@16 165 return *this;
Chris@16 166 }
Chris@16 167 process_times& operator/=(rep const& rhs)
Chris@16 168 {
Chris@16 169 real/=rhs;
Chris@16 170 user/=rhs;
Chris@16 171 system/=rhs;
Chris@16 172 return *this;
Chris@16 173 }
Chris@16 174 bool operator<(process_times const & rhs) const
Chris@16 175 {
Chris@16 176 if (real < rhs.real) return true;
Chris@16 177 if (real > rhs.real) return false;
Chris@16 178 if (user < rhs.user) return true;
Chris@16 179 if (user > rhs.user) return false;
Chris@16 180 if (system < rhs.system) return true;
Chris@16 181 else return false;
Chris@16 182 }
Chris@16 183
Chris@16 184 template <class CharT, class Traits>
Chris@16 185 void print(std::basic_ostream<CharT, Traits>& os) const
Chris@16 186 {
Chris@16 187 os << "{"<< real <<";"<< user <<";"<< system << "}";
Chris@16 188 }
Chris@16 189
Chris@16 190 template <class CharT, class Traits>
Chris@101 191 void read(std::basic_istream<CharT, Traits>& is)
Chris@16 192 {
Chris@16 193 typedef std::istreambuf_iterator<CharT, Traits> in_iterator;
Chris@16 194 in_iterator i(is);
Chris@16 195 in_iterator e;
Chris@16 196 if (i == e || *i != '{') // mandatory '{'
Chris@16 197 {
Chris@16 198 is.setstate(is.failbit | is.eofbit);
Chris@16 199 return;
Chris@16 200 }
Chris@16 201 CharT x,y,z;
Chris@16 202 is >> real >> x >> user >> y >> system >> z;
Chris@16 203 if (!is.good() || (x != ';')|| (y != ';')|| (z != '}'))
Chris@16 204 {
Chris@16 205 is.setstate(is.failbit);
Chris@16 206 }
Chris@16 207 }
Chris@16 208 };
Chris@16 209 }
Chris@16 210 template <class Rep1, class Rep2>
Chris@16 211 struct common_type<
Chris@16 212 chrono::process_times<Rep1>,
Chris@16 213 chrono::process_times<Rep2>
Chris@16 214 >
Chris@16 215 {
Chris@16 216 typedef chrono::process_times<typename common_type<Rep1, Rep2>::type> type;
Chris@16 217 };
Chris@16 218
Chris@16 219 template <class Rep1, class Rep2>
Chris@16 220 struct common_type<
Chris@16 221 chrono::process_times<Rep1>,
Chris@16 222 Rep2
Chris@16 223 >
Chris@16 224 {
Chris@16 225 typedef chrono::process_times<typename common_type<Rep1, Rep2>::type> type;
Chris@16 226 };
Chris@16 227
Chris@16 228 template <class Rep1, class Rep2>
Chris@16 229 struct common_type<
Chris@16 230 Rep1,
Chris@16 231 chrono::process_times<Rep2>
Chris@16 232 >
Chris@16 233 {
Chris@16 234 typedef chrono::process_times<typename common_type<Rep1, Rep2>::type> type;
Chris@16 235 };
Chris@16 236
Chris@16 237
Chris@16 238 namespace chrono
Chris@16 239 {
Chris@16 240 template <class Rep1, class Period1, class Rep2, class Period2>
Chris@16 241 inline BOOST_CONSTEXPR
Chris@16 242 bool
Chris@16 243 operator==(const duration<process_times<Rep1>, Period1>& lhs,
Chris@16 244 const duration<process_times<Rep2>, Period2>& rhs)
Chris@16 245 {
Chris@16 246 return boost::chrono::detail::duration_eq<
Chris@16 247 duration<process_times<Rep1>, Period1>, duration<process_times<Rep2>, Period2> >()(lhs, rhs);
Chris@16 248 }
Chris@16 249
Chris@16 250 template <class Rep1, class Period1, class Rep2, class Period2>
Chris@16 251 inline BOOST_CONSTEXPR
Chris@16 252 bool
Chris@16 253 operator==(const duration<process_times<Rep1>, Period1>& lhs,
Chris@16 254 const duration<Rep2, Period2>& rhs)
Chris@16 255 {
Chris@16 256 return boost::chrono::detail::duration_eq<
Chris@16 257 duration<Rep1, Period1>, duration<Rep2, Period2> >()(duration<Rep1, Period1>(lhs.count().real), rhs);
Chris@16 258 }
Chris@16 259
Chris@16 260 template <class Rep1, class Period1, class Rep2, class Period2>
Chris@16 261 inline BOOST_CONSTEXPR
Chris@16 262 bool
Chris@16 263 operator==(const duration<Rep1, Period1>& lhs,
Chris@16 264 const duration<process_times<Rep2>, Period2>& rhs)
Chris@16 265 {
Chris@16 266 return rhs == lhs;
Chris@16 267 }
Chris@16 268
Chris@16 269
Chris@16 270 // Duration <
Chris@16 271
Chris@16 272 template <class Rep1, class Period1, class Rep2, class Period2>
Chris@16 273 inline BOOST_CONSTEXPR
Chris@16 274 bool
Chris@16 275 operator< (const duration<process_times<Rep1>, Period1>& lhs,
Chris@16 276 const duration<Rep2, Period2>& rhs)
Chris@16 277 {
Chris@16 278 return boost::chrono::detail::duration_lt<
Chris@16 279 duration<Rep1, Period1>, duration<Rep2, Period2> >()(duration<Rep1, Period1>(lhs.count().real), rhs);
Chris@16 280 }
Chris@16 281
Chris@16 282 template <class Rep1, class Period1, class Rep2, class Period2>
Chris@16 283 inline BOOST_CONSTEXPR
Chris@16 284 bool
Chris@16 285 operator< (const duration<Rep1, Period1>& lhs,
Chris@16 286 const duration<process_times<Rep2>, Period2>& rhs)
Chris@16 287 {
Chris@16 288 return rhs < lhs;
Chris@16 289 }
Chris@16 290
Chris@16 291 template <class Rep1, class Period1, class Rep2, class Period2>
Chris@16 292 inline BOOST_CONSTEXPR
Chris@16 293 bool
Chris@16 294 operator< (const duration<process_times<Rep1>, Period1>& lhs,
Chris@16 295 const duration<process_times<Rep2>, Period2>& rhs)
Chris@16 296 {
Chris@16 297 return boost::chrono::detail::duration_lt<
Chris@16 298 duration<Rep1, Period1>, duration<Rep2, Period2> >()(lhs, rhs);
Chris@16 299 }
Chris@16 300
Chris@16 301
Chris@16 302 typedef process_times<nanoseconds::rep> process_cpu_clock_times;
Chris@101 303 #if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
Chris@16 304 class BOOST_CHRONO_DECL process_cpu_clock
Chris@16 305 {
Chris@16 306 public:
Chris@16 307
Chris@16 308 typedef process_cpu_clock_times times;
Chris@16 309 typedef boost::chrono::duration<times, nano> duration;
Chris@16 310 typedef duration::rep rep;
Chris@16 311 typedef duration::period period;
Chris@16 312 typedef chrono::time_point<process_cpu_clock> time_point;
Chris@16 313 BOOST_STATIC_CONSTEXPR bool is_steady = true;
Chris@16 314
Chris@16 315 static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
Chris@16 316 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
Chris@16 317 static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
Chris@16 318 #endif
Chris@16 319 };
Chris@101 320 #endif
Chris@16 321
Chris@16 322 template <class CharT, class Traits, typename Rep>
Chris@16 323 std::basic_ostream<CharT, Traits>&
Chris@16 324 operator<<(std::basic_ostream<CharT, Traits>& os,
Chris@16 325 process_times<Rep> const& rhs)
Chris@16 326 {
Chris@16 327 rhs.print(os);
Chris@16 328 return os;
Chris@16 329 }
Chris@16 330
Chris@16 331 template <class CharT, class Traits, typename Rep>
Chris@16 332 std::basic_istream<CharT, Traits>&
Chris@16 333 operator>>(std::basic_istream<CharT, Traits>& is,
Chris@101 334 process_times<Rep>& rhs)
Chris@16 335 {
Chris@16 336 rhs.read(is);
Chris@16 337 return is;
Chris@16 338 }
Chris@16 339
Chris@16 340 template <typename Rep>
Chris@16 341 struct duration_values<process_times<Rep> >
Chris@16 342 {
Chris@16 343 typedef process_times<Rep> Res;
Chris@16 344 public:
Chris@16 345 static Res zero()
Chris@16 346 {
Chris@16 347 return Res();
Chris@16 348 }
Chris@16 349 static Res max BOOST_PREVENT_MACRO_SUBSTITUTION ()
Chris@16 350 {
Chris@16 351 return Res((std::numeric_limits<Rep>::max)(),
Chris@16 352 (std::numeric_limits<Rep>::max)(),
Chris@16 353 (std::numeric_limits<Rep>::max)());
Chris@16 354 }
Chris@16 355 static Res min BOOST_PREVENT_MACRO_SUBSTITUTION ()
Chris@16 356 {
Chris@16 357 return Res((std::numeric_limits<Rep>::min)(),
Chris@16 358 (std::numeric_limits<Rep>::min)(),
Chris@16 359 (std::numeric_limits<Rep>::min)());
Chris@16 360 }
Chris@16 361 };
Chris@16 362
Chris@16 363 template<class CharT>
Chris@16 364 struct clock_string<process_real_cpu_clock, CharT>
Chris@16 365 {
Chris@16 366 static std::basic_string<CharT> name()
Chris@16 367 {
Chris@16 368 static const CharT
Chris@16 369 u[] =
Chris@16 370 { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'r', 'e', 'a', 'l', '_', 'c', 'l', 'o', 'c', 'k' };
Chris@16 371 static const std::basic_string<CharT> str(u, u + sizeof(u)
Chris@16 372 / sizeof(u[0]));
Chris@16 373 return str;
Chris@16 374 }
Chris@16 375 static std::basic_string<CharT> since()
Chris@16 376 {
Chris@16 377 const CharT
Chris@16 378 u[] =
Chris@16 379 { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
Chris@16 380 const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
Chris@16 381 return str;
Chris@16 382 }
Chris@16 383 };
Chris@16 384
Chris@101 385 #if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
Chris@16 386 template<class CharT>
Chris@16 387 struct clock_string<process_user_cpu_clock, CharT>
Chris@16 388 {
Chris@16 389 static std::basic_string<CharT> name()
Chris@16 390 {
Chris@16 391 static const CharT
Chris@16 392 u[] =
Chris@16 393 { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'u', 's', 'e', 'r', '_', 'c', 'l', 'o', 'c', 'k' };
Chris@16 394 static const std::basic_string<CharT> str(u, u + sizeof(u)
Chris@16 395 / sizeof(u[0]));
Chris@16 396 return str;
Chris@16 397 }
Chris@16 398 static std::basic_string<CharT> since()
Chris@16 399 {
Chris@16 400 const CharT
Chris@16 401 u[] =
Chris@16 402 { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
Chris@16 403 const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
Chris@16 404 return str;
Chris@16 405 }
Chris@16 406 };
Chris@16 407
Chris@16 408 template<class CharT>
Chris@16 409 struct clock_string<process_system_cpu_clock, CharT>
Chris@16 410 {
Chris@16 411 static std::basic_string<CharT> name()
Chris@16 412 {
Chris@16 413 static const CharT
Chris@16 414 u[] =
Chris@16 415 { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 's', 'y', 's', 't', 't', 'e', 'm', '_', 'c', 'l', 'o', 'c', 'k' };
Chris@16 416 static const std::basic_string<CharT> str(u, u + sizeof(u)
Chris@16 417 / sizeof(u[0]));
Chris@16 418 return str;
Chris@16 419 }
Chris@16 420 static std::basic_string<CharT> since()
Chris@16 421 {
Chris@16 422 const CharT
Chris@16 423 u[] =
Chris@16 424 { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
Chris@16 425 const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
Chris@16 426 return str;
Chris@16 427 }
Chris@16 428 };
Chris@16 429
Chris@16 430 template<class CharT>
Chris@16 431 struct clock_string<process_cpu_clock, CharT>
Chris@16 432 {
Chris@16 433 static std::basic_string<CharT> name()
Chris@16 434 {
Chris@16 435 static const CharT u[] =
Chris@16 436 { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'c', 'l', 'o', 'c', 'k' };
Chris@16 437 static const std::basic_string<CharT> str(u, u + sizeof(u)
Chris@16 438 / sizeof(u[0]));
Chris@16 439 return str;
Chris@16 440 }
Chris@16 441 static std::basic_string<CharT> since()
Chris@16 442 {
Chris@16 443 const CharT
Chris@16 444 u[] =
Chris@16 445 { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
Chris@16 446 const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
Chris@16 447 return str;
Chris@16 448 }
Chris@16 449 };
Chris@101 450 #endif
Chris@16 451
Chris@16 452 } // namespace chrono
Chris@16 453 } // namespace boost
Chris@16 454
Chris@16 455 namespace std {
Chris@16 456
Chris@16 457 template <typename Rep>
Chris@16 458 struct numeric_limits<boost::chrono::process_times<Rep> >
Chris@16 459 {
Chris@16 460 typedef boost::chrono::process_times<Rep> Res;
Chris@16 461
Chris@16 462 public:
Chris@16 463 static const bool is_specialized = true;
Chris@16 464 static Res min BOOST_PREVENT_MACRO_SUBSTITUTION ()
Chris@16 465 {
Chris@16 466 return Res((std::numeric_limits<Rep>::min)(),
Chris@16 467 (std::numeric_limits<Rep>::min)(),
Chris@16 468 (std::numeric_limits<Rep>::min)());
Chris@16 469 }
Chris@16 470 static Res max BOOST_PREVENT_MACRO_SUBSTITUTION ()
Chris@16 471 {
Chris@16 472 return Res((std::numeric_limits<Rep>::max)(),
Chris@16 473 (std::numeric_limits<Rep>::max)(),
Chris@16 474 (std::numeric_limits<Rep>::max)());
Chris@16 475 }
Chris@16 476 static Res lowest() throw()
Chris@16 477 {
Chris@16 478 return (min)();
Chris@16 479 }
Chris@16 480 static const int digits = std::numeric_limits<Rep>::digits+
Chris@16 481 std::numeric_limits<Rep>::digits+
Chris@16 482 std::numeric_limits<Rep>::digits;
Chris@16 483 static const int digits10 = std::numeric_limits<Rep>::digits10+
Chris@16 484 std::numeric_limits<Rep>::digits10+
Chris@16 485 std::numeric_limits<Rep>::digits10;
Chris@16 486 static const bool is_signed = Rep::is_signed;
Chris@16 487 static const bool is_integer = Rep::is_integer;
Chris@16 488 static const bool is_exact = Rep::is_exact;
Chris@16 489 static const int radix = 0;
Chris@16 490 //~ static Res epsilon() throw() { return 0; }
Chris@16 491 //~ static Res round_error() throw() { return 0; }
Chris@16 492 //~ static const int min_exponent = 0;
Chris@16 493 //~ static const int min_exponent10 = 0;
Chris@16 494 //~ static const int max_exponent = 0;
Chris@16 495 //~ static const int max_exponent10 = 0;
Chris@16 496 //~ static const bool has_infinity = false;
Chris@16 497 //~ static const bool has_quiet_NaN = false;
Chris@16 498 //~ static const bool has_signaling_NaN = false;
Chris@16 499 //~ static const float_denorm_style has_denorm = denorm_absent;
Chris@16 500 //~ static const bool has_denorm_loss = false;
Chris@16 501 //~ static Res infinity() throw() { return 0; }
Chris@16 502 //~ static Res quiet_NaN() throw() { return 0; }
Chris@16 503 //~ static Res signaling_NaN() throw() { return 0; }
Chris@16 504 //~ static Res denorm_min() throw() { return 0; }
Chris@16 505 //~ static const bool is_iec559 = false;
Chris@16 506 //~ static const bool is_bounded = true;
Chris@16 507 //~ static const bool is_modulo = false;
Chris@16 508 //~ static const bool traps = false;
Chris@16 509 //~ static const bool tinyness_before = false;
Chris@16 510 //~ static const float_round_style round_style = round_toward_zero;
Chris@16 511
Chris@16 512 };
Chris@16 513 }
Chris@16 514
Chris@16 515 #ifndef BOOST_CHRONO_HEADER_ONLY
Chris@16 516 #include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
Chris@16 517 #else
Chris@16 518 #include <boost/chrono/detail/inlined/process_cpu_clocks.hpp>
Chris@16 519 #endif
Chris@16 520 #endif
Chris@16 521
Chris@16 522 #endif // BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP