381 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			381 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//  duration.hpp  --------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Copyright 2008 Howard Hinnant
							 | 
						||
| 
								 | 
							
								//  Copyright 2008 Beman Dawes
							 | 
						||
| 
								 | 
							
								//  Copyright 2009-2012 Vicente J. Botet Escriba
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Distributed under the Boost Software License, Version 1.0.
							 | 
						||
| 
								 | 
							
								//  See http://www.boost.org/LICENSE_1_0.txt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
							 | 
						||
| 
								 | 
							
								Many thanks to Howard for making his code available under the Boost license.
							 | 
						||
| 
								 | 
							
								The original code was modified to conform to Boost conventions and to section
							 | 
						||
| 
								 | 
							
								20.9 Time utilities [time] of the C++ committee's working paper N2798.
							 | 
						||
| 
								 | 
							
								See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								time2_demo contained this comment:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Much thanks to Andrei Alexandrescu,
							 | 
						||
| 
								 | 
							
								                   Walter Brown,
							 | 
						||
| 
								 | 
							
								                   Peter Dimov,
							 | 
						||
| 
								 | 
							
								                   Jeff Garland,
							 | 
						||
| 
								 | 
							
								                   Terry Golubiewski,
							 | 
						||
| 
								 | 
							
								                   Daniel Krugler,
							 | 
						||
| 
								 | 
							
								                   Anthony Williams.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CHRONO_TIME_POINT_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_CHRONO_TIME_POINT_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/chrono/duration.hpp>
							 | 
						||
| 
								 | 
							
								#include <iostream>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CHRONO_HEADER_ONLY
							 | 
						||
| 
								 | 
							
								// this must occur after all of the includes and before any code appears:
							 | 
						||
| 
								 | 
							
								#include <boost/config/abi_prefix.hpp> // must be the last #include
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								//                                                                            //
							 | 
						||
| 
								 | 
							
								//                        20.9 Time utilities [time]                          //
							 | 
						||
| 
								 | 
							
								//                                 synopsis                                   //
							 | 
						||
| 
								 | 
							
								//                                                                            //
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace chrono {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class Clock, class Duration = typename Clock::duration>
							 | 
						||
| 
								 | 
							
								    class time_point;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace chrono
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// common_type trait specializations
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								  struct common_type<chrono::time_point<Clock, Duration1>,
							 | 
						||
| 
								 | 
							
								                     chrono::time_point<Clock, Duration2> >;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								//      20.9.2.3 Specializations of common_type [time.traits.specializations] //
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								struct common_type<chrono::time_point<Clock, Duration1>,
							 | 
						||
| 
								 | 
							
								                   chrono::time_point<Clock, Duration2> >
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  typedef chrono::time_point<Clock,
							 | 
						||
| 
								 | 
							
								    typename common_type<Duration1, Duration2>::type> type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace chrono {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point arithmetic
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock,
							 | 
						||
| 
								 | 
							
								        typename common_type<Duration1, duration<Rep2, Period2> >::type>
							 | 
						||
| 
								 | 
							
								    operator+(
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const duration<Rep2, Period2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Rep1, class Period1, class Clock, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock,
							 | 
						||
| 
								 | 
							
								        typename common_type<duration<Rep1, Period1>, Duration2>::type>
							 | 
						||
| 
								 | 
							
								    operator+(
							 | 
						||
| 
								 | 
							
								            const duration<Rep1, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock,
							 | 
						||
| 
								 | 
							
								        typename common_type<Duration1, duration<Rep2, Period2> >::type>
							 | 
						||
| 
								 | 
							
								    operator-(
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const duration<Rep2, Period2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    typename common_type<Duration1, Duration2>::type
							 | 
						||
| 
								 | 
							
								    operator-(
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const time_point<Clock,
							 | 
						||
| 
								 | 
							
								            Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point comparisons
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool operator==(
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool operator!=(
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool operator< (
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool operator<=(
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool operator> (
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool operator>=(
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								          const time_point<Clock, Duration2>& rhs);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point_cast
							 | 
						||
| 
								 | 
							
								    template <class ToDuration, class Clock, class Duration>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock, ToDuration> time_point_cast(const time_point<Clock, Duration>& t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								//                                                                            //
							 | 
						||
| 
								 | 
							
								//      20.9.4 Class template time_point [time.point]                         //
							 | 
						||
| 
								 | 
							
								//                                                                            //
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration>
							 | 
						||
| 
								 | 
							
								    class time_point
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        BOOST_CHRONO_STATIC_ASSERT(boost::chrono::detail::is_duration<Duration>::value,
							 | 
						||
| 
								 | 
							
								                BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_TIME_POINT_MUST_BE_A_BOOST_CHRONO_DURATION, (Duration));
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        typedef Clock                     clock;
							 | 
						||
| 
								 | 
							
								        typedef Duration                  duration;
							 | 
						||
| 
								 | 
							
								        typedef typename duration::rep    rep;
							 | 
						||
| 
								 | 
							
								        typedef typename duration::period period;
							 | 
						||
| 
								 | 
							
								        typedef Duration                  difference_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private:
							 | 
						||
| 
								 | 
							
								        duration d_;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        BOOST_FORCEINLINE BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								        time_point() : d_(duration::zero())
							 | 
						||
| 
								 | 
							
								        {}
							 | 
						||
| 
								 | 
							
								        BOOST_FORCEINLINE BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								        explicit time_point(const duration& d)
							 | 
						||
| 
								 | 
							
								            : d_(d)
							 | 
						||
| 
								 | 
							
								        {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // conversions
							 | 
						||
| 
								 | 
							
								        template <class Duration2>
							 | 
						||
| 
								 | 
							
								        BOOST_FORCEINLINE BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								        time_point(const time_point<clock, Duration2>& t
							 | 
						||
| 
								 | 
							
								                , typename boost::enable_if
							 | 
						||
| 
								 | 
							
								                <
							 | 
						||
| 
								 | 
							
								                    boost::is_convertible<Duration2, duration>
							 | 
						||
| 
								 | 
							
								                >::type* = 0
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								            : d_(t.time_since_epoch())
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // observer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								        duration time_since_epoch() const
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return d_;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // arithmetic
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_CHRONO_EXTENSIONS
							 | 
						||
| 
								 | 
							
								        BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								        time_point  operator+() const {return *this;}
							 | 
						||
| 
								 | 
							
								        BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								        time_point  operator-() const {return time_point(-d_);}
							 | 
						||
| 
								 | 
							
								        time_point& operator++()      {++d_; return *this;}
							 | 
						||
| 
								 | 
							
								        time_point  operator++(int)   {return time_point(d_++);}
							 | 
						||
| 
								 | 
							
								        time_point& operator--()      {--d_; return *this;}
							 | 
						||
| 
								 | 
							
								        time_point  operator--(int)   {return time_point(d_--);}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        time_point& operator+=(const rep& r) {d_ += duration(r); return *this;}
							 | 
						||
| 
								 | 
							
								        time_point& operator-=(const rep& r) {d_ -= duration(r); return *this;}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        time_point& operator+=(const duration& d) {d_ += d; return *this;}
							 | 
						||
| 
								 | 
							
								        time_point& operator-=(const duration& d) {d_ -= d; return *this;}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // special values
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_LIB_CONSTEXPR time_point
							 | 
						||
| 
								 | 
							
								        min BOOST_PREVENT_MACRO_SUBSTITUTION ()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return time_point((duration::min)());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        static BOOST_CHRONO_LIB_CONSTEXPR time_point
							 | 
						||
| 
								 | 
							
								        max BOOST_PREVENT_MACRO_SUBSTITUTION ()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return time_point((duration::max)());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								//      20.9.4.5 time_point non-member arithmetic [time.point.nonmember]      //
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point operator+(time_point x, duration y);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock,
							 | 
						||
| 
								 | 
							
								        typename common_type<Duration1, duration<Rep2, Period2> >::type>
							 | 
						||
| 
								 | 
							
								    operator+(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const duration<Rep2, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      typedef typename common_type<Duration1, duration<Rep2, Period2> >::type CDuration;
							 | 
						||
| 
								 | 
							
								      typedef time_point<
							 | 
						||
| 
								 | 
							
								          Clock,
							 | 
						||
| 
								 | 
							
								          CDuration
							 | 
						||
| 
								 | 
							
								      > TimeResult;
							 | 
						||
| 
								 | 
							
								        return TimeResult(lhs.time_since_epoch() + CDuration(rhs));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point operator+(duration x, time_point y);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Rep1, class Period1, class Clock, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock,
							 | 
						||
| 
								 | 
							
								        typename common_type<duration<Rep1, Period1>, Duration2>::type>
							 | 
						||
| 
								 | 
							
								    operator+(const duration<Rep1, Period1>& lhs,
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return rhs + lhs;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point operator-(time_point x, duration y);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Rep2, class Period2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock,
							 | 
						||
| 
								 | 
							
								        typename common_type<Duration1, duration<Rep2, Period2> >::type>
							 | 
						||
| 
								 | 
							
								    operator-(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const duration<Rep2, Period2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return lhs + (-rhs);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // duration operator-(time_point x, time_point y);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    typename common_type<Duration1, Duration2>::type
							 | 
						||
| 
								 | 
							
								    operator-(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return lhs.time_since_epoch() - rhs.time_since_epoch();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								//      20.9.4.6 time_point comparisons [time.point.comparisons]              //
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point ==
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool
							 | 
						||
| 
								 | 
							
								    operator==(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								             const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return lhs.time_since_epoch() == rhs.time_since_epoch();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point !=
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool
							 | 
						||
| 
								 | 
							
								    operator!=(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								             const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return !(lhs == rhs);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point <
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool
							 | 
						||
| 
								 | 
							
								    operator<(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return lhs.time_since_epoch() < rhs.time_since_epoch();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point >
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool
							 | 
						||
| 
								 | 
							
								    operator>(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								            const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return rhs < lhs;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point <=
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool
							 | 
						||
| 
								 | 
							
								    operator<=(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								             const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return !(rhs < lhs);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // time_point >=
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class Clock, class Duration1, class Duration2>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    bool
							 | 
						||
| 
								 | 
							
								    operator>=(const time_point<Clock, Duration1>& lhs,
							 | 
						||
| 
								 | 
							
								             const time_point<Clock, Duration2>& rhs)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return !(lhs < rhs);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								//      20.9.4.7 time_point_cast [time.point.cast]                            //
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <class ToDuration, class Clock, class Duration>
							 | 
						||
| 
								 | 
							
								    inline BOOST_CONSTEXPR
							 | 
						||
| 
								 | 
							
								    time_point<Clock, ToDuration>
							 | 
						||
| 
								 | 
							
								    time_point_cast(const time_point<Clock, Duration>& t)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return time_point<Clock, ToDuration>(
							 | 
						||
| 
								 | 
							
								                duration_cast<ToDuration>(t.time_since_epoch()));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace chrono
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CHRONO_HEADER_ONLY
							 | 
						||
| 
								 | 
							
								// the suffix header occurs after all of our code:
							 | 
						||
| 
								 | 
							
								#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_CHRONO_TIME_POINT_HPP
							 |