annotate DEPENDENCIES/generic/include/boost/date_time/gregorian/greg_duration.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 #ifndef GREG_DURATION_HPP___
Chris@16 2 #define GREG_DURATION_HPP___
Chris@16 3
Chris@16 4 /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
Chris@16 5 * Use, modification and distribution is subject to the
Chris@16 6 * Boost Software License, Version 1.0. (See accompanying
Chris@16 7 * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 * Author: Jeff Garland, Bart Garst
Chris@101 9 * $Date$
Chris@16 10 */
Chris@16 11
Chris@16 12 #include <boost/date_time/date_duration.hpp>
Chris@16 13 #include <boost/date_time/int_adapter.hpp>
Chris@16 14 #include <boost/date_time/special_defs.hpp>
Chris@16 15
Chris@16 16 namespace boost {
Chris@16 17 namespace gregorian {
Chris@16 18
Chris@16 19 //!An internal date representation that includes infinities, not a date
Chris@16 20 typedef boost::date_time::duration_traits_adapted date_duration_rep;
Chris@16 21
Chris@16 22 //! Durations in days for gregorian system
Chris@16 23 /*! \ingroup date_basics
Chris@16 24 */
Chris@16 25 class date_duration :
Chris@16 26 public boost::date_time::date_duration< date_duration_rep >
Chris@16 27 {
Chris@16 28 typedef boost::date_time::date_duration< date_duration_rep > base_type;
Chris@16 29
Chris@16 30 public:
Chris@16 31 typedef base_type::duration_rep duration_rep;
Chris@16 32
Chris@16 33 //! Construct from a day count
Chris@16 34 explicit date_duration(duration_rep day_count = 0) : base_type(day_count) {}
Chris@16 35
Chris@16 36 //! construct from special_values
Chris@16 37 date_duration(date_time::special_values sv) : base_type(sv) {}
Chris@16 38
Chris@16 39 //! Copy constructor
Chris@16 40 date_duration(const date_duration& other) : base_type(static_cast< base_type const& >(other))
Chris@16 41 {}
Chris@16 42
Chris@16 43 //! Construct from another date_duration
Chris@16 44 date_duration(const base_type& other) : base_type(other)
Chris@16 45 {}
Chris@16 46
Chris@16 47 // Relational operators
Chris@16 48 // NOTE: Because of date_time::date_duration< T > design choice we don't use Boost.Operators here,
Chris@16 49 // because we need the class to be a direct base. Either lose EBO, or define operators by hand.
Chris@16 50 // The latter is more effecient.
Chris@16 51 bool operator== (const date_duration& rhs) const
Chris@16 52 {
Chris@16 53 return base_type::operator== (rhs);
Chris@16 54 }
Chris@16 55 bool operator!= (const date_duration& rhs) const
Chris@16 56 {
Chris@16 57 return !operator== (rhs);
Chris@16 58 }
Chris@16 59 bool operator< (const date_duration& rhs) const
Chris@16 60 {
Chris@16 61 return base_type::operator< (rhs);
Chris@16 62 }
Chris@16 63 bool operator> (const date_duration& rhs) const
Chris@16 64 {
Chris@16 65 return !(base_type::operator< (rhs) || base_type::operator== (rhs));
Chris@16 66 }
Chris@16 67 bool operator<= (const date_duration& rhs) const
Chris@16 68 {
Chris@16 69 return (base_type::operator< (rhs) || base_type::operator== (rhs));
Chris@16 70 }
Chris@16 71 bool operator>= (const date_duration& rhs) const
Chris@16 72 {
Chris@16 73 return !base_type::operator< (rhs);
Chris@16 74 }
Chris@16 75
Chris@16 76 //! Subtract another duration -- result is signed
Chris@16 77 date_duration& operator-= (const date_duration& rhs)
Chris@16 78 {
Chris@16 79 base_type::operator-= (rhs);
Chris@16 80 return *this;
Chris@16 81 }
Chris@16 82 friend date_duration operator- (date_duration rhs, date_duration const& lhs)
Chris@16 83 {
Chris@16 84 rhs -= lhs;
Chris@16 85 return rhs;
Chris@16 86 }
Chris@16 87
Chris@16 88 //! Add a duration -- result is signed
Chris@16 89 date_duration& operator+= (const date_duration& rhs)
Chris@16 90 {
Chris@16 91 base_type::operator+= (rhs);
Chris@16 92 return *this;
Chris@16 93 }
Chris@16 94 friend date_duration operator+ (date_duration rhs, date_duration const& lhs)
Chris@16 95 {
Chris@16 96 rhs += lhs;
Chris@16 97 return rhs;
Chris@16 98 }
Chris@16 99
Chris@16 100 //! unary- Allows for dd = -date_duration(2); -> dd == -2
Chris@16 101 date_duration operator- ()const
Chris@16 102 {
Chris@16 103 return date_duration(get_rep() * (-1));
Chris@16 104 }
Chris@16 105
Chris@16 106 //! Division operations on a duration with an integer.
Chris@16 107 date_duration& operator/= (int divisor)
Chris@16 108 {
Chris@16 109 base_type::operator/= (divisor);
Chris@16 110 return *this;
Chris@16 111 }
Chris@16 112 friend date_duration operator/ (date_duration rhs, int lhs)
Chris@16 113 {
Chris@16 114 rhs /= lhs;
Chris@16 115 return rhs;
Chris@16 116 }
Chris@16 117
Chris@16 118 //! Returns the smallest duration -- used by to calculate 'end'
Chris@16 119 static date_duration unit()
Chris@16 120 {
Chris@16 121 return date_duration(base_type::unit().get_rep());
Chris@16 122 }
Chris@16 123 };
Chris@16 124
Chris@16 125 //! Shorthand for date_duration
Chris@16 126 typedef date_duration days;
Chris@16 127
Chris@16 128 } } //namespace gregorian
Chris@16 129
Chris@16 130 #if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
Chris@16 131 #include <boost/date_time/date_duration_types.hpp>
Chris@16 132 #endif
Chris@16 133
Chris@16 134 #endif