LCOV - code coverage report
Current view: top level - opt/homebrew/include/boost/date_time - date_duration.hpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 0 8 0.0 %
Date: 2026-06-25 07:23:43 Functions: 0 5 0.0 %

          Line data    Source code
       1             : #ifndef DATE_TIME_DATE_DURATION__
       2             : #define DATE_TIME_DATE_DURATION__
       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             : 
      13             : #include <boost/operators.hpp>
      14             : #include <boost/date_time/special_defs.hpp>
      15             : #include <boost/date_time/compiler_config.hpp>
      16             : #include <boost/date_time/int_adapter.hpp>
      17             : 
      18             : namespace boost {
      19             : namespace date_time {
      20             : 
      21             : 
      22             :   //! Duration type with date level resolution
      23             :   template<class duration_rep_traits>
      24             :   class BOOST_SYMBOL_VISIBLE date_duration : private
      25             :               boost::less_than_comparable1< date_duration< duration_rep_traits >
      26             :             , boost::equality_comparable1< date_duration< duration_rep_traits >
      27             :             , boost::addable1< date_duration< duration_rep_traits >
      28             :             , boost::subtractable1< date_duration< duration_rep_traits >
      29             :             , boost::dividable2< date_duration< duration_rep_traits >, int
      30             :             > > > > >
      31             :   {
      32             :   public:
      33             :     typedef typename duration_rep_traits::int_type duration_rep_type;
      34             :     typedef typename duration_rep_traits::impl_type duration_rep;
      35             : 
      36             :     //! Construct from a day count
      37           0 :     BOOST_CXX14_CONSTEXPR explicit date_duration(duration_rep day_count) : days_(day_count) {}
      38             : 
      39             :     /*! construct from special_values - only works when
      40             :      * instantiated with duration_traits_adapted */
      41             :     BOOST_CXX14_CONSTEXPR date_duration(special_values sv) :
      42             :             days_(duration_rep::from_special(sv))
      43             :     {}
      44             : 
      45             :     //! returns days_ as it's instantiated type - used for streaming
      46           0 :     BOOST_CXX14_CONSTEXPR duration_rep get_rep()const
      47             :     {
      48           0 :         return days_;
      49             :     }
      50             :     BOOST_CXX14_CONSTEXPR special_values as_special() const
      51             :     {
      52             :         return days_.as_special();
      53             :     }
      54           0 :     BOOST_CXX14_CONSTEXPR bool is_special()const
      55             :     {
      56           0 :         return days_.is_special();
      57             :     }
      58             :     //! returns days as value, not object.
      59           0 :     BOOST_CXX14_CONSTEXPR duration_rep_type days() const
      60             :     {
      61           0 :         return duration_rep_traits::as_number(days_);
      62             :     }
      63             :     //! Returns the smallest duration -- used by to calculate 'end'
      64             :     static BOOST_CXX14_CONSTEXPR date_duration unit()
      65             :     {
      66             :         return date_duration<duration_rep_traits>(1);
      67             :     }
      68             :     //! Equality
      69             :     BOOST_CXX14_CONSTEXPR bool operator==(const date_duration& rhs) const
      70             :     {
      71             :         return days_ == rhs.days_;
      72             :     }
      73             :     //! Less
      74             :     BOOST_CXX14_CONSTEXPR bool operator<(const date_duration& rhs) const
      75             :     {
      76             :         return days_ < rhs.days_;
      77             :     }
      78             : 
      79             :     /* For shortcut operators (+=, -=, etc) simply using
      80             :      * "days_ += days_" may not work. If instantiated with
      81             :      * an int_adapter, shortcut operators are not present,
      82             :      * so this will not compile */
      83             : 
      84             :     //! Subtract another duration -- result is signed
      85             :     BOOST_CXX14_CONSTEXPR date_duration& operator-=(const date_duration& rhs)
      86             :     {
      87             :         //days_ -= rhs.days_;
      88             :         days_ = days_ - rhs.days_;
      89             :         return *this;
      90             :     }
      91             :     //! Add a duration -- result is signed
      92             :     BOOST_CXX14_CONSTEXPR date_duration& operator+=(const date_duration& rhs)
      93             :     {
      94             :         days_ = days_ + rhs.days_;
      95             :         return *this;
      96             :     }
      97             : 
      98             :     //! unary- Allows for dd = -date_duration(2); -> dd == -2
      99             :     BOOST_CXX14_CONSTEXPR date_duration operator-() const
     100             :     {
     101             :         return date_duration<duration_rep_traits>(get_rep() * (-1));
     102             :     }
     103             :     //! Division operations on a duration with an integer.
     104             :     BOOST_CXX14_CONSTEXPR date_duration& operator/=(int divisor)
     105             :     {
     106             :         days_ = days_ / divisor;
     107             :         return *this;
     108             :     }
     109             : 
     110             :     //! return sign information
     111             :     BOOST_CXX14_CONSTEXPR bool is_negative() const
     112             :     {
     113             :         return days_ < 0;
     114             :     }
     115             : 
     116             :   private:
     117             :     duration_rep days_;
     118             :   };
     119             : 
     120             : 
     121             :   /*! Struct for instantiating date_duration with <b>NO</b> special values
     122             :    * functionality. Allows for transparent implementation of either
     123             :    * date_duration<long> or date_duration<int_adapter<long> > */
     124             :   struct BOOST_SYMBOL_VISIBLE duration_traits_long
     125             :   {
     126             :     typedef long int_type;
     127             :     typedef long impl_type;
     128             :     static BOOST_CXX14_CONSTEXPR int_type as_number(impl_type i) { return i; }
     129             :   };
     130             : 
     131             :   /*! Struct for instantiating date_duration <b>WITH</b> special values
     132             :    * functionality. Allows for transparent implementation of either
     133             :    * date_duration<long> or date_duration<int_adapter<long> > */
     134             :   struct BOOST_SYMBOL_VISIBLE duration_traits_adapted
     135             :   {
     136             :     typedef long int_type;
     137             :     typedef boost::date_time::int_adapter<long> impl_type;
     138           0 :     static BOOST_CXX14_CONSTEXPR int_type as_number(impl_type i) { return i.as_number(); }
     139             :   };
     140             : 
     141             : 
     142             : } } //namspace date_time
     143             : 
     144             : 
     145             : #endif
     146             : 

Generated by: LCOV version 1.16