LCOV - code coverage report
Current view: top level - usr/include/boost/date_time - date_duration.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 6 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14