526 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			526 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//  boost/chrono/process_cpu_clocks.hpp  -----------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Copyright 2009-2011 Vicente J. Botet Escriba
							 | 
						||
| 
								 | 
							
								//  Copyright (c) Microsoft Corporation 2014
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Distributed under the Boost Software License, Version 1.0.
							 | 
						||
| 
								 | 
							
								//  See http://www.boost.org/LICENSE_1_0.txt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  See http://www.boost.org/libs/system for documentation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/config.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/duration.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/time_point.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/operators.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/detail/system.hpp>
							 | 
						||
| 
								 | 
							
								#include <iostream>
							 | 
						||
| 
								 | 
							
								#include <boost/type_traits/common_type.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/clock_string.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CHRONO_HEADER_ONLY
							 | 
						||
| 
								 | 
							
								#include <boost/config/abi_prefix.hpp> // must be the last #include
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost { namespace chrono {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class BOOST_CHRONO_DECL process_real_cpu_clock {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        typedef nanoseconds                          duration;
							 | 
						||
| 
								 | 
							
								        typedef duration::rep                        rep;
							 | 
						||
| 
								 | 
							
								        typedef duration::period                     period;
							 | 
						||
| 
								 | 
							
								        typedef chrono::time_point<process_real_cpu_clock>    time_point;
							 | 
						||
| 
								 | 
							
								        BOOST_STATIC_CONSTEXPR bool is_steady =             true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
							 | 
						||
| 
								 | 
							
								#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
							 | 
						||
| 
								 | 
							
								    class BOOST_CHRONO_DECL process_user_cpu_clock {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        typedef nanoseconds                          duration;
							 | 
						||
| 
								 | 
							
								        typedef duration::rep                        rep;
							 | 
						||
| 
								 | 
							
								        typedef duration::period                     period;
							 | 
						||
| 
								 | 
							
								        typedef chrono::time_point<process_user_cpu_clock>    time_point;
							 | 
						||
| 
								 | 
							
								        BOOST_STATIC_CONSTEXPR bool is_steady =             true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
							 | 
						||
| 
								 | 
							
								#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class BOOST_CHRONO_DECL process_system_cpu_clock {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        typedef nanoseconds                          duration;
							 | 
						||
| 
								 | 
							
								        typedef duration::rep                        rep;
							 | 
						||
| 
								 | 
							
								        typedef duration::period                     period;
							 | 
						||
| 
								 | 
							
								        typedef chrono::time_point<process_system_cpu_clock>    time_point;
							 | 
						||
| 
								 | 
							
								        BOOST_STATIC_CONSTEXPR bool is_steady =             true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
							 | 
						||
| 
								 | 
							
								#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        template <typename Rep>
							 | 
						||
| 
								 | 
							
								        struct process_times
							 | 
						||
| 
								 | 
							
								            : arithmetic<process_times<Rep>,
							 | 
						||
| 
								 | 
							
								            multiplicative<process_times<Rep>, Rep,
							 | 
						||
| 
								 | 
							
								            less_than_comparable<process_times<Rep> > > >
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								              //typedef process_real_cpu_clock::rep rep;
							 | 
						||
| 
								 | 
							
								              typedef Rep rep;
							 | 
						||
| 
								 | 
							
								            process_times()
							 | 
						||
| 
								 | 
							
								                : real(0)
							 | 
						||
| 
								 | 
							
								                , user(0)
							 | 
						||
| 
								 | 
							
								                , system(0){}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
							 | 
						||
| 
								 | 
							
								            template <typename Rep2>
							 | 
						||
| 
								 | 
							
								            explicit process_times(
							 | 
						||
| 
								 | 
							
								                Rep2 r)
							 | 
						||
| 
								 | 
							
								                : real(r)
							 | 
						||
| 
								 | 
							
								                , user(r)
							 | 
						||
| 
								 | 
							
								                , system(r){}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								            template <typename Rep2>
							 | 
						||
| 
								 | 
							
								            explicit process_times(
							 | 
						||
| 
								 | 
							
								                process_times<Rep2> const& rhs)
							 | 
						||
| 
								 | 
							
								                : real(rhs.real)
							 | 
						||
| 
								 | 
							
								                , user(rhs.user)
							 | 
						||
| 
								 | 
							
								                , system(rhs.system){}
							 | 
						||
| 
								 | 
							
								            process_times(
							 | 
						||
| 
								 | 
							
								                rep r,
							 | 
						||
| 
								 | 
							
								                rep u,
							 | 
						||
| 
								 | 
							
								                rep s)
							 | 
						||
| 
								 | 
							
								                : real(r)
							 | 
						||
| 
								 | 
							
								                , user(u)
							 | 
						||
| 
								 | 
							
								                , system(s){}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            rep   real;    // real (i.e wall clock) time
							 | 
						||
| 
								 | 
							
								            rep   user;    // user cpu time
							 | 
						||
| 
								 | 
							
								            rep system;  // system cpu time
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
							 | 
						||
| 
								 | 
							
								            operator rep() const
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								              return real;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								            template <typename Rep2>
							 | 
						||
| 
								 | 
							
								            bool operator==(process_times<Rep2> const& rhs) {
							 | 
						||
| 
								 | 
							
								                return (real==rhs.real &&
							 | 
						||
| 
								 | 
							
								                        user==rhs.user &&
							 | 
						||
| 
								 | 
							
								                        system==rhs.system);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            process_times& operator+=(
							 | 
						||
| 
								 | 
							
								                process_times const& rhs)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                real+=rhs.real;
							 | 
						||
| 
								 | 
							
								                user+=rhs.user;
							 | 
						||
| 
								 | 
							
								                system+=rhs.system;
							 | 
						||
| 
								 | 
							
								                return *this;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            process_times& operator-=(
							 | 
						||
| 
								 | 
							
								                process_times const& rhs)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                real-=rhs.real;
							 | 
						||
| 
								 | 
							
								                user-=rhs.user;
							 | 
						||
| 
								 | 
							
								                system-=rhs.system;
							 | 
						||
| 
								 | 
							
								                return *this;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            process_times& operator*=(
							 | 
						||
| 
								 | 
							
								                process_times const& rhs)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                real*=rhs.real;
							 | 
						||
| 
								 | 
							
								                user*=rhs.user;
							 | 
						||
| 
								 | 
							
								                system*=rhs.system;
							 | 
						||
| 
								 | 
							
								                return *this;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            process_times& operator*=(rep const& rhs)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                real*=rhs;
							 | 
						||
| 
								 | 
							
								                user*=rhs;
							 | 
						||
| 
								 | 
							
								                system*=rhs;
							 | 
						||
| 
								 | 
							
								                return *this;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            process_times& operator/=(process_times const& rhs)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                real/=rhs.real;
							 | 
						||
| 
								 | 
							
								                user/=rhs.user;
							 | 
						||
| 
								 | 
							
								                system/=rhs.system;
							 | 
						||
| 
								 | 
							
								                return *this;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            process_times& operator/=(rep const& rhs)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                real/=rhs;
							 | 
						||
| 
								 | 
							
								                user/=rhs;
							 | 
						||
| 
								 | 
							
								                system/=rhs;
							 | 
						||
| 
								 | 
							
								                return *this;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            bool operator<(process_times const & rhs) const
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if (real < rhs.real) return true;
							 | 
						||
| 
								 | 
							
								                if (real > rhs.real) return false;
							 | 
						||
| 
								 | 
							
								                if (user < rhs.user) return true;
							 | 
						||
| 
								 | 
							
								                if (user > rhs.user) return false;
							 | 
						||
| 
								 | 
							
								                if (system < rhs.system) return true;
							 | 
						||
| 
								 | 
							
								                else return false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            template <class CharT, class Traits>
							 | 
						||
| 
								 | 
							
								            void print(std::basic_ostream<CharT, Traits>& os) const
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                os <<  "{"<< real <<";"<< user <<";"<< system << "}";
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            template <class CharT, class Traits>
							 | 
						||
| 
								 | 
							
								            void read(std::basic_istream<CharT, Traits>& is)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                typedef std::istreambuf_iterator<CharT, Traits> in_iterator;
							 | 
						||
| 
								 | 
							
								                in_iterator i(is);
							 | 
						||
| 
								 | 
							
								                in_iterator e;
							 | 
						||
| 
								 | 
							
								                if (i == e || *i++ != '{')  // mandatory '{'
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    is.setstate(is.failbit | is.eofbit);
							 | 
						||
| 
								 | 
							
								                    return;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                CharT x,y,z;
							 | 
						||
| 
								 | 
							
								                is >> real >> x >> user >> y >> system >> z;
							 | 
						||
| 
								 | 
							
								                if (!is.good() || (x != ';')|| (y != ';')|| (z != '}'))
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    is.setstate(is.failbit);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								template <class Rep1, class Rep2>
							 | 
						||
| 
								 | 
							
								struct common_type<
							 | 
						||
| 
								 | 
							
								  chrono::process_times<Rep1>,
							 | 
						||
| 
								 | 
							
								  chrono::process_times<Rep2>
							 | 
						||
| 
								 | 
							
								>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  typedef chrono::process_times<typename common_type<Rep1, Rep2>::type> type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Rep1, class Rep2>
							 | 
						||
| 
								 | 
							
								struct common_type<
							 | 
						||
| 
								 | 
							
								  chrono::process_times<Rep1>,
							 | 
						||
| 
								 | 
							
								  Rep2
							 | 
						||
| 
								 | 
							
								>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  typedef chrono::process_times<typename common_type<Rep1, Rep2>::type> type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Rep1, class Rep2>
							 | 
						||
| 
								 | 
							
								struct common_type<
							 | 
						||
| 
								 | 
							
								  Rep1,
							 | 
						||
| 
								 | 
							
								  chrono::process_times<Rep2>
							 | 
						||
| 
								 | 
							
								>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  typedef chrono::process_times<typename common_type<Rep1, Rep2>::type> type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace chrono
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  template <class Rep1, class Period1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								  inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								  bool
							 | 
						||
| 
								 | 
							
								  operator==(const duration<process_times<Rep1>, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								        const duration<process_times<Rep2>, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								      return boost::chrono::detail::duration_eq<
							 | 
						||
| 
								 | 
							
								          duration<Rep1, Period1>, duration<Rep2, Period2>
							 | 
						||
| 
								 | 
							
								        >()(duration<Rep1, Period1>(lhs.count().real), duration<Rep2, Period2>(rhs.count().real));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class Rep1, class Period1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								  inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								  bool
							 | 
						||
| 
								 | 
							
								  operator==(const duration<process_times<Rep1>, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								        const duration<Rep2, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								      return boost::chrono::detail::duration_eq<
							 | 
						||
| 
								 | 
							
								          duration<Rep1, Period1>, duration<Rep2, Period2> >()(duration<Rep1, Period1>(lhs.count().real), rhs);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class Rep1, class Period1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								  inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								  bool
							 | 
						||
| 
								 | 
							
								  operator==(const duration<Rep1, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								        const duration<process_times<Rep2>, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								      return rhs == lhs;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Duration <
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class Rep1, class Period1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								  inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								  bool
							 | 
						||
| 
								 | 
							
								  operator< (const duration<process_times<Rep1>, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								        const duration<Rep2, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								      return boost::chrono::detail::duration_lt<
							 | 
						||
| 
								 | 
							
								        duration<Rep1, Period1>, duration<Rep2, Period2> >()(duration<Rep1, Period1>(lhs.count().real), rhs);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class Rep1, class Period1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								  inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								  bool
							 | 
						||
| 
								 | 
							
								  operator< (const duration<Rep1, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								        const duration<process_times<Rep2>, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								      return boost::chrono::detail::duration_lt<
							 | 
						||
| 
								 | 
							
								        duration<Rep1, Period1>, duration<Rep2, Period2> >()(lhs, duration<Rep2, Period2>(rhs.count().real));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class Rep1, class Period1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								  inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								  bool
							 | 
						||
| 
								 | 
							
								  operator< (const duration<process_times<Rep1>, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								        const duration<process_times<Rep2>, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return boost::chrono::detail::duration_lt<
							 | 
						||
| 
								 | 
							
								        duration<Rep1, Period1>, duration<Rep2, Period2>
							 | 
						||
| 
								 | 
							
								      >()(duration<Rep1, Period1>(lhs.count().real), duration<Rep2, Period2>(rhs.count().real));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  typedef process_times<nanoseconds::rep> process_cpu_clock_times;
							 | 
						||
| 
								 | 
							
								#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
							 | 
						||
| 
								 | 
							
								    class BOOST_CHRONO_DECL process_cpu_clock
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        typedef process_cpu_clock_times times;
							 | 
						||
| 
								 | 
							
								        typedef boost::chrono::duration<times,  nano>                duration;
							 | 
						||
| 
								 | 
							
								        typedef duration::rep                       rep;
							 | 
						||
| 
								 | 
							
								        typedef duration::period                    period;
							 | 
						||
| 
								 | 
							
								        typedef chrono::time_point<process_cpu_clock>  time_point;
							 | 
						||
| 
								 | 
							
								        BOOST_STATIC_CONSTEXPR bool is_steady =           true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
							 | 
						||
| 
								 | 
							
								#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class CharT, class Traits, typename Rep>
							 | 
						||
| 
								 | 
							
								    std::basic_ostream<CharT, Traits>&
							 | 
						||
| 
								 | 
							
								    operator<<(std::basic_ostream<CharT, Traits>& os,
							 | 
						||
| 
								 | 
							
								        process_times<Rep> const& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        rhs.print(os);
							 | 
						||
| 
								 | 
							
								        return os;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class CharT, class Traits, typename Rep>
							 | 
						||
| 
								 | 
							
								    std::basic_istream<CharT, Traits>&
							 | 
						||
| 
								 | 
							
								    operator>>(std::basic_istream<CharT, Traits>& is,
							 | 
						||
| 
								 | 
							
								        process_times<Rep>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        rhs.read(is);
							 | 
						||
| 
								 | 
							
								        return is;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <typename Rep>
							 | 
						||
| 
								 | 
							
								    struct duration_values<process_times<Rep> >
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        typedef process_times<Rep> Res;
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        static Res zero()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return Res();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        static Res max BOOST_PREVENT_MACRO_SUBSTITUTION ()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          return Res((std::numeric_limits<Rep>::max)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::max)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::max)());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        static Res min BOOST_PREVENT_MACRO_SUBSTITUTION ()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          return Res((std::numeric_limits<Rep>::min)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::min)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::min)());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<class CharT>
							 | 
						||
| 
								 | 
							
								    struct clock_string<process_real_cpu_clock, CharT>
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> name()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        static const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'r', 'e', 'a', 'l', '_', 'c', 'l', 'o', 'c', 'k' };
							 | 
						||
| 
								 | 
							
								        static const std::basic_string<CharT> str(u, u + sizeof(u)
							 | 
						||
| 
								 | 
							
								            / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> since()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
							 | 
						||
| 
								 | 
							
								        const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
							 | 
						||
| 
								 | 
							
								    template<class CharT>
							 | 
						||
| 
								 | 
							
								    struct clock_string<process_user_cpu_clock, CharT>
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> name()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        static const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'u', 's', 'e', 'r', '_', 'c', 'l', 'o', 'c', 'k' };
							 | 
						||
| 
								 | 
							
								        static const std::basic_string<CharT> str(u, u + sizeof(u)
							 | 
						||
| 
								 | 
							
								            / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> since()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
							 | 
						||
| 
								 | 
							
								        const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<class CharT>
							 | 
						||
| 
								 | 
							
								    struct clock_string<process_system_cpu_clock, CharT>
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> name()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        static const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 's', 'y', 's', 't', 'e', 'm', '_', 'c', 'l', 'o', 'c', 'k' };
							 | 
						||
| 
								 | 
							
								        static const std::basic_string<CharT> str(u, u + sizeof(u)
							 | 
						||
| 
								 | 
							
								            / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> since()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
							 | 
						||
| 
								 | 
							
								        const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<class CharT>
							 | 
						||
| 
								 | 
							
								    struct clock_string<process_cpu_clock, CharT>
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> name()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        static const CharT u[] =
							 | 
						||
| 
								 | 
							
								        { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'c', 'l', 'o', 'c', 'k' };
							 | 
						||
| 
								 | 
							
								        static const std::basic_string<CharT> str(u, u + sizeof(u)
							 | 
						||
| 
								 | 
							
								            / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      static std::basic_string<CharT> since()
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        const CharT
							 | 
						||
| 
								 | 
							
								            u[] =
							 | 
						||
| 
								 | 
							
								                { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' };
							 | 
						||
| 
								 | 
							
								        const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
							 | 
						||
| 
								 | 
							
								        return str;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace chrono
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace std {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <typename Rep>
							 | 
						||
| 
								 | 
							
								    struct numeric_limits<boost::chrono::process_times<Rep> >
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        typedef boost::chrono::process_times<Rep> Res;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public:
							 | 
						||
| 
								 | 
							
								        static const bool is_specialized = true;
							 | 
						||
| 
								 | 
							
								        static Res min BOOST_PREVENT_MACRO_SUBSTITUTION ()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          return Res((std::numeric_limits<Rep>::min)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::min)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::min)());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        static Res max BOOST_PREVENT_MACRO_SUBSTITUTION ()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          return Res((std::numeric_limits<Rep>::max)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::max)(),
							 | 
						||
| 
								 | 
							
								                      (std::numeric_limits<Rep>::max)());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        static Res lowest() throw()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return (min)();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        static const int digits = std::numeric_limits<Rep>::digits+
							 | 
						||
| 
								 | 
							
								                        std::numeric_limits<Rep>::digits+
							 | 
						||
| 
								 | 
							
								                        std::numeric_limits<Rep>::digits;
							 | 
						||
| 
								 | 
							
								        static const int digits10 = std::numeric_limits<Rep>::digits10+
							 | 
						||
| 
								 | 
							
								                        std::numeric_limits<Rep>::digits10+
							 | 
						||
| 
								 | 
							
								                        std::numeric_limits<Rep>::digits10;
							 | 
						||
| 
								 | 
							
								        static const bool is_signed = Rep::is_signed;
							 | 
						||
| 
								 | 
							
								        static const bool is_integer = Rep::is_integer;
							 | 
						||
| 
								 | 
							
								        static const bool is_exact = Rep::is_exact;
							 | 
						||
| 
								 | 
							
								        static const int radix = 0;
							 | 
						||
| 
								 | 
							
								        //~ static Res epsilon() throw() { return 0; }
							 | 
						||
| 
								 | 
							
								        //~ static Res round_error() throw() { return 0; }
							 | 
						||
| 
								 | 
							
								        //~ static const int min_exponent = 0;
							 | 
						||
| 
								 | 
							
								        //~ static const int min_exponent10 = 0;
							 | 
						||
| 
								 | 
							
								        //~ static const int max_exponent = 0;
							 | 
						||
| 
								 | 
							
								        //~ static const int max_exponent10 = 0;
							 | 
						||
| 
								 | 
							
								        //~ static const bool has_infinity = false;
							 | 
						||
| 
								 | 
							
								        //~ static const bool has_quiet_NaN = false;
							 | 
						||
| 
								 | 
							
								        //~ static const bool has_signaling_NaN = false;
							 | 
						||
| 
								 | 
							
								        //~ static const float_denorm_style has_denorm = denorm_absent;
							 | 
						||
| 
								 | 
							
								        //~ static const bool has_denorm_loss = false;
							 | 
						||
| 
								 | 
							
								        //~ static Res infinity() throw() { return 0; }
							 | 
						||
| 
								 | 
							
								        //~ static Res quiet_NaN() throw() { return 0; }
							 | 
						||
| 
								 | 
							
								        //~ static Res signaling_NaN() throw() { return 0; }
							 | 
						||
| 
								 | 
							
								        //~ static Res denorm_min() throw() { return 0; }
							 | 
						||
| 
								 | 
							
								        //~ static const bool is_iec559 = false;
							 | 
						||
| 
								 | 
							
								        //~ static const bool is_bounded = true;
							 | 
						||
| 
								 | 
							
								        //~ static const bool is_modulo = false;
							 | 
						||
| 
								 | 
							
								        //~ static const bool traps = false;
							 | 
						||
| 
								 | 
							
								        //~ static const bool tinyness_before = false;
							 | 
						||
| 
								 | 
							
								        //~ static const float_round_style round_style = round_toward_zero;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CHRONO_HEADER_ONLY
							 | 
						||
| 
								 | 
							
								#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/detail/inlined/process_cpu_clocks.hpp>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  // BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP
							 |