summaryrefslogtreecommitdiff
path: root/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix')
-rw-r--r--src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/chrono.hpp121
-rw-r--r--src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp354
-rw-r--r--src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/thread_clock.hpp92
3 files changed, 567 insertions, 0 deletions
diff --git a/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/chrono.hpp b/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/chrono.hpp
new file mode 100644
index 00000000000..a9e4e63037d
--- /dev/null
+++ b/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/chrono.hpp
@@ -0,0 +1,121 @@
+// posix/chrono.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2008
+// Copyright Vicente J. Botet Escriba 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+//----------------------------------------------------------------------------//
+// POSIX //
+//----------------------------------------------------------------------------//
+
+#include <time.h> // for clock_gettime
+#include <boost/assert.hpp>
+
+namespace boost
+{
+namespace chrono
+{
+
+ system_clock::time_point system_clock::now() BOOST_NOEXCEPT
+ {
+ timespec ts;
+ if ( ::clock_gettime( CLOCK_REALTIME, &ts ) )
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+
+ return time_point(duration(
+ static_cast<system_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ system_clock::time_point system_clock::now(system::error_code & ec)
+ {
+ timespec ts;
+ if ( ::clock_gettime( CLOCK_REALTIME, &ts ) )
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::system_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+
+ if (!::boost::chrono::is_throws(ec))
+ {
+ ec.clear();
+ }
+ return time_point(duration(
+ static_cast<system_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+ }
+#endif
+
+ std::time_t system_clock::to_time_t(const system_clock::time_point& t) BOOST_NOEXCEPT
+ {
+ return static_cast<std::time_t>( t.time_since_epoch().count() / 1000000000 );
+ }
+
+ system_clock::time_point system_clock::from_time_t(std::time_t t) BOOST_NOEXCEPT
+ {
+ return time_point(duration(static_cast<system_clock::rep>(t) * 1000000000));
+ }
+
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+
+ steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT
+ {
+ timespec ts;
+ if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) )
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+
+ return time_point(duration(
+ static_cast<steady_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ steady_clock::time_point steady_clock::now(system::error_code & ec)
+ {
+ timespec ts;
+ if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) )
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::steady_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+
+ if (!::boost::chrono::is_throws(ec))
+ {
+ ec.clear();
+ }
+ return time_point(duration(
+ static_cast<steady_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+ }
+#endif
+#endif
+
+} // namespace chrono
+} // namespace boost
+
+
diff --git a/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp b/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp
new file mode 100644
index 00000000000..f9a9e1293c8
--- /dev/null
+++ b/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp
@@ -0,0 +1,354 @@
+// boost process_cpu_clocks.cpp -----------------------------------------------------------//
+
+// Copyright Beman Dawes 1994, 2006, 2008
+// Copyright Vicente J. Botet Escriba 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See http://www.boost.org/libs/chrono for documentation.
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/chrono/config.hpp>
+#include <boost/chrono/process_cpu_clocks.hpp>
+#include <boost/assert.hpp>
+
+#include <sys/times.h>
+#include <unistd.h>
+#include <time.h> // for clock_gettime
+
+
+namespace boost { namespace chrono {
+namespace chrono_detail
+{
+ inline nanoseconds::rep tick_factor() // multiplier to convert ticks
+ // to nanoseconds; -1 if unknown
+ {
+ long factor = 0;
+ if ( !factor )
+ {
+ if ( (factor = ::sysconf( _SC_CLK_TCK )) <= 0 )
+ factor = -1;
+ else
+ {
+ BOOST_ASSERT( factor <= 1000000000l ); // doesn't handle large ticks
+ factor = 1000000000l / factor; // compute factor
+ if ( !factor ) factor = -1;
+ }
+ }
+ return factor;
+ }
+}
+
+process_real_cpu_clock::time_point process_real_cpu_clock::now() BOOST_NOEXCEPT
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ return time_point(
+ nanoseconds(c*chrono_detail::tick_factor()));
+ }
+ else
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+ }
+ return time_point();
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+process_real_cpu_clock::time_point process_real_cpu_clock::now(
+ system::error_code & ec)
+{
+
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_real_cpu_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ if (!::boost::chrono::is_throws(ec))
+ {
+ ec.clear();
+ }
+ return time_point(
+ nanoseconds(c*chrono_detail::tick_factor()));
+ }
+ else
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_real_cpu_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ }
+}
+#endif
+
+process_user_cpu_clock::time_point process_user_cpu_clock::now() BOOST_NOEXCEPT
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ return time_point(
+ nanoseconds((tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor()));
+ }
+ else
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+ }
+ return time_point();
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+process_user_cpu_clock::time_point process_user_cpu_clock::now(
+ system::error_code & ec)
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_user_cpu_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ if (!::boost::chrono::is_throws(ec))
+ {
+ ec.clear();
+ }
+ return time_point(
+ nanoseconds((tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor()));
+ }
+ else
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_user_cpu_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ }
+}
+#endif
+
+process_system_cpu_clock::time_point process_system_cpu_clock::now() BOOST_NOEXCEPT
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ return time_point();
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ return time_point(
+ nanoseconds((tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()));
+ }
+ else
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ return time_point();
+ }
+ }
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+process_system_cpu_clock::time_point process_system_cpu_clock::now(
+ system::error_code & ec)
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_system_cpu_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ if (!::boost::chrono::is_throws(ec))
+ {
+ ec.clear();
+ }
+ return time_point(
+ nanoseconds((tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()));
+ }
+ else
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_system_cpu_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ }
+}
+#endif
+
+process_cpu_clock::time_point process_cpu_clock::now() BOOST_NOEXCEPT
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+ else
+ {
+ nanoseconds::rep factor = chrono_detail::tick_factor();
+ if ( factor != -1 )
+ {
+ time_point::rep r(
+ c*factor,
+ (tm.tms_utime + tm.tms_cutime)*factor,
+ (tm.tms_stime + tm.tms_cstime)*factor);
+ return time_point(duration(r));
+ }
+ else
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+ }
+ return time_point();
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+process_cpu_clock::time_point process_cpu_clock::now(
+ system::error_code & ec )
+{
+ tms tm;
+ clock_t c = ::times( &tm );
+ if ( c == clock_t(-1) ) // error
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ else
+ {
+ if ( chrono_detail::tick_factor() != -1 )
+ {
+ time_point::rep r(
+ c*chrono_detail::tick_factor(),
+ (tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(),
+ (tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor());
+ return time_point(duration(r));
+ }
+ else
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::process_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ }
+
+}
+#endif
+
+} }
diff --git a/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/thread_clock.hpp b/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/thread_clock.hpp
new file mode 100644
index 00000000000..a2a2d9cf65d
--- /dev/null
+++ b/src/third_party/boost-1.69.0/boost/chrono/detail/inlined/posix/thread_clock.hpp
@@ -0,0 +1,92 @@
+// boost thread_clock.cpp -----------------------------------------------------------//
+
+// Copyright Beman Dawes 1994, 2006, 2008
+// Copyright Vicente J. Botet Escriba 2009-2011
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See http://www.boost.org/libs/chrono for documentation.
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/chrono/config.hpp>
+#include <boost/chrono/thread_clock.hpp>
+#include <cassert>
+#include <boost/assert.hpp>
+
+#if !defined(__VXWORKS__)
+# include <sys/times.h>
+#endif
+# include <pthread.h>
+# include <unistd.h>
+
+namespace boost { namespace chrono {
+
+ thread_clock::time_point thread_clock::now( ) BOOST_NOEXCEPT
+ {
+ struct timespec ts;
+#if defined CLOCK_THREAD_CPUTIME_ID
+ // get the timespec associated to the thread clock
+ if ( ::clock_gettime( CLOCK_THREAD_CPUTIME_ID, &ts ) )
+#else
+ // get the current thread
+ pthread_t pth=pthread_self();
+ // get the clock_id associated to the current thread
+ clockid_t clock_id;
+ pthread_getcpuclockid(pth, &clock_id);
+ // get the timespec associated to the thread clock
+ if ( ::clock_gettime( clock_id, &ts ) )
+#endif
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
+
+ // transform to nanoseconds
+ return time_point(duration(
+ static_cast<thread_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ thread_clock::time_point thread_clock::now( system::error_code & ec )
+ {
+ struct timespec ts;
+#if defined CLOCK_THREAD_CPUTIME_ID
+ // get the timespec associated to the thread clock
+ if ( ::clock_gettime( CLOCK_THREAD_CPUTIME_ID, &ts ) )
+#else
+ // get the current thread
+ pthread_t pth=pthread_self();
+ // get the clock_id associated to the current thread
+ clockid_t clock_id;
+ pthread_getcpuclockid(pth, &clock_id);
+ // get the timespec associated to the thread clock
+ if ( ::clock_gettime( clock_id, &ts ) )
+#endif
+ {
+ if (::boost::chrono::is_throws(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ errno,
+ ::boost::system::system_category(),
+ "chrono::thread_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, ::boost::system::system_category() );
+ return time_point();
+ }
+ }
+ if (!::boost::chrono::is_throws(ec))
+ {
+ ec.clear();
+ }
+ // transform to nanoseconds
+ return time_point(duration(
+ static_cast<thread_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+
+ }
+#endif
+} }