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