astrotypes  0.0
TimePoint.h
Go to the documentation of this file.
1 /*
2  * The MIT License (MIT)
3  *
4  * Copyright (c) 2016 The SKA organisation
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
25 // This class taken from the orignal ska::cheetah::units class
26 
27 #ifndef PSS_ASTROTYPES_UTILS_TIMEPOINT_H
28 #define PSS_ASTROTYPES_UTILS_TIMEPOINT_H
29 #pragma GCC diagnostic push
30 #pragma GCC diagnostic ignored "-Wall"
31 #pragma GCC diagnostic ignored "-Wpragmas"
32 #pragma GCC diagnostic ignored "-Wunused-parameter"
33 #pragma GCC diagnostic ignored "-Wunused-variable"
34 #include <boost/units/systems/si/time.hpp>
35 #include <boost/units/quantity.hpp>
36 #include <boost/units/is_quantity.hpp>
37 #include <boost/units/is_unit_of_dimension.hpp>
38 #pragma GCC diagnostic pop
39 #include <chrono>
40 #include <ostream>
41 
42 
43 namespace pss {
44 namespace astrotypes {
45 namespace units {
46 
52 template<typename ClockType, typename Duration = typename ClockType::duration>
53 struct TimePoint : public std::chrono::time_point<ClockType, Duration>
54 {
55  explicit TimePoint( const Duration& d = typename ClockType::duration() );
56  template<typename QuantityType>
58  explicit TimePoint( QuantityType const& d, typename std::enable_if<
59  boost::units::is_quantity<QuantityType>::value
60  && boost::units::is_unit_of_dimension<typename QuantityType::unit_type, boost::units::time_dimension>::value
61  , QuantityType>::type = 0);
62  explicit TimePoint( const std::chrono::system_clock::time_point& tp );
63  TimePoint( const std::chrono::time_point<ClockType, Duration>& tp );
64  TimePoint( std::chrono::time_point<ClockType, Duration>&& );
65 
66  operator typename std::chrono::system_clock::time_point() const;
69 
74  std::time_t to_time_t() const;
75 };
76 
77 template<typename ClockType, typename Duration, typename Duration2>
79 
80 template<typename ClockType, typename Duration, typename Duration2>
82 
83 template<typename ClockType, typename Duration, typename Duration2>
85 
91 template<typename ClockType, typename Duration>
92 std::ostream& operator<<(std::ostream&, TimePoint<ClockType> const& tp);
93 
94 } // namespace units
95 } // namespace astrotypes
96 } // namespace pss
97 #include "detail/TimePoint.cpp"
98 
99 #endif // PSS_ASTROTYPES_UTILS_TIMEPOINT_H
TimePoint(const Duration &d=typename ClockType::duration())
Definition: TimePoint.cpp:46
std::time_t to_time_t() const
convert to a C style time struct. very useful if you want to output the time as a string with e...
Definition: TimePoint.cpp:87
TimePoint< ClockType, Duration > operator+(TimePoint< ClockType, Duration > const &lhs, Duration2 const &rhs)
Definition: TimePoint.cpp:117
TimePoint< ClockType, Duration > & operator-=(Duration const &)
Definition: TimePoint.cpp:110
TimePoint< ClockType, Duration > & operator+=(Duration const &)
Definition: TimePoint.cpp:103
TimePoint< ClockType, DurationType > operator-(TimePoint< ClockType, DurationType > const &lhs, boost::units::quantity< boost::units::si::time, Rep > const &rhs)
Definition: TimePoint.cpp:135
extension of std::chrono::time_point for astrotypes clocks
Definition: TimePoint.h:53