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

          Line data    Source code
       1             : #ifndef DATE_TIME_TIME_HPP___
       2             : #define DATE_TIME_TIME_HPP___
       3             : 
       4             : /* Copyright (c) 2002,2003,2005,2020 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             : /*! @file time.hpp
      14             :   This file contains the interface for the time associated classes.
      15             : */
      16             : #include <string>
      17             : #include <boost/operators.hpp>
      18             : #include <boost/date_time/time_defs.hpp>
      19             : #include <boost/date_time/special_defs.hpp>
      20             : 
      21             : namespace boost {
      22             : namespace date_time {
      23             : 
      24             :   //! Representation of a precise moment in time, including the date.
      25             :   /*! 
      26             :     This class is a skeleton for the interface of a temporal type
      27             :     with a resolution that is higher than a day.  It is intended that 
      28             :     this class be the base class and that the actual time 
      29             :     class be derived using the BN pattern.  In this way, the derived 
      30             :     class can make decisions such as 'should there be a default constructor' 
      31             :     and what should it set its value to, should there be optional constructors
      32             :     say allowing only an time_durations that generate a time from a clock,etc.
      33             :     So, in fact multiple time types can be created for a time_system with
      34             :     different construction policies, and all of them can perform basic
      35             :     operations by only writing a copy constructor.  Finally, compiler 
      36             :     errors are also shorter. 
      37             :     
      38             :     The real behavior of the time class is provided by the time_system
      39             :     template parameter.  This class must provide all the logic
      40             :     for addition, subtraction, as well as define all the interface
      41             :     types.
      42             :     
      43             :   */
      44             : 
      45             :   template <class T, class time_system>
      46             :   class base_time : private
      47             :       boost::less_than_comparable<T
      48             :     , boost::equality_comparable<T
      49             :       > >
      50             :   {
      51             :   public:
      52             :     // A tag for type categorization. Can be used to detect Boost.DateTime time points in generic code.
      53             :     typedef void _is_boost_date_time_time_point;
      54             :     typedef T time_type;
      55             :     typedef typename time_system::time_rep_type time_rep_type;
      56             :     typedef typename time_system::date_type date_type;
      57             :     typedef typename time_system::date_duration_type date_duration_type;
      58             :     typedef typename time_system::time_duration_type time_duration_type;
      59             :     //typedef typename time_system::hms_type hms_type;
      60             :     
      61             :     BOOST_CXX14_CONSTEXPR
      62        2514 :     base_time(const date_type& day, 
      63             :               const time_duration_type& td, 
      64             :               dst_flags dst=not_dst) :
      65        2514 :       time_(time_system::get_time_rep(day, td, dst))
      66        2514 :     {}
      67             :     BOOST_CXX14_CONSTEXPR
      68        2506 :     base_time(special_values sv) :
      69        2506 :       time_(time_system::get_time_rep(sv))
      70        2506 :     {}
      71             :     BOOST_CXX14_CONSTEXPR
      72          14 :     base_time(const time_rep_type& rhs) :
      73          14 :       time_(rhs)
      74          14 :     {}
      75             :     BOOST_CXX14_CONSTEXPR
      76             :     date_type date() const
      77             :     {
      78             :       return time_system::get_date(time_);
      79             :     }
      80             :     BOOST_CXX14_CONSTEXPR
      81             :     time_duration_type time_of_day() const
      82             :     {
      83             :       return time_system::get_time_of_day(time_);
      84             :     }
      85             :     /*! Optional bool parameter will return time zone as an offset 
      86             :      * (ie "+07:00"). Empty string is returned for classes that do 
      87             :      * not use a time_zone */
      88             :     std::string zone_name(bool /*as_offset*/=false) const
      89             :     {
      90             :       return time_system::zone_name(time_);
      91             :     }
      92             :     /*! Optional bool parameter will return time zone as an offset 
      93             :      * (ie "+07:00"). Empty string is returned for classes that do 
      94             :      * not use a time_zone */
      95             :     std::string zone_abbrev(bool /*as_offset*/=false) const
      96             :     {
      97             :       return time_system::zone_name(time_);
      98             :     }
      99             :     //! An empty string is returned for classes that do not use a time_zone
     100             :     std::string zone_as_posix_string() const
     101             :     {
     102             :       return std::string();
     103             :     }
     104             : 
     105             :     //! check to see if date is not a value
     106             :     BOOST_CXX14_CONSTEXPR
     107        2506 :     bool is_not_a_date_time()  const
     108             :     {
     109        2506 :       return time_.is_not_a_date_time();
     110             :     }
     111             :     //! check to see if date is one of the infinity values
     112             :     BOOST_CXX14_CONSTEXPR
     113             :     bool is_infinity()  const
     114             :     {
     115             :       return (is_pos_infinity() || is_neg_infinity()); 
     116             :     }
     117             :     //! check to see if date is greater than all possible dates
     118             :     BOOST_CXX14_CONSTEXPR
     119             :     bool is_pos_infinity()  const
     120             :     {
     121             :       return time_.is_pos_infinity();
     122             :     }
     123             :     //! check to see if date is greater than all possible dates
     124             :     BOOST_CXX14_CONSTEXPR
     125             :     bool is_neg_infinity()  const
     126             :     {
     127             :       return time_.is_neg_infinity();
     128             :     }
     129             :     //! check to see if time is a special value
     130             :     BOOST_CXX14_CONSTEXPR
     131             :     bool is_special() const
     132             :     {
     133             :       return(is_not_a_date_time() || is_infinity());
     134             :     }
     135             :     //!Equality operator -- others generated by boost::equality_comparable
     136             :     BOOST_CXX14_CONSTEXPR
     137             :     bool operator==(const time_type& rhs) const
     138             :     {
     139             :       return time_system::is_equal(time_,rhs.time_);
     140             :     }
     141             :     //!Equality operator -- others generated by boost::less_than_comparable
     142             :     BOOST_CXX14_CONSTEXPR
     143        2500 :     bool operator<(const time_type& rhs) const
     144             :     {
     145        2500 :       return time_system::is_less(time_,rhs.time_);
     146             :     }
     147             :     //! difference between two times
     148             :     BOOST_CXX14_CONSTEXPR
     149        2499 :     time_duration_type operator-(const time_type& rhs) const
     150             :     {
     151        2499 :       return time_system::subtract_times(time_, rhs.time_);
     152             :     }
     153             :     //! add date durations
     154             :     BOOST_CXX14_CONSTEXPR
     155             :     time_type operator+(const date_duration_type& dd) const
     156             :     {
     157             :       return time_system::add_days(time_, dd);
     158             :     }
     159             :     BOOST_CXX14_CONSTEXPR
     160             :     time_type operator+=(const date_duration_type& dd)
     161             :     {
     162             :       time_ = (time_system::get_time_rep(date() + dd, time_of_day()));
     163             :       return time_type(time_);
     164             :     }
     165             :     //! subtract date durations
     166             :     BOOST_CXX14_CONSTEXPR
     167             :     time_type operator-(const date_duration_type& dd) const
     168             :     {
     169             :       return time_system::subtract_days(time_, dd);
     170             :     }
     171             :     BOOST_CXX14_CONSTEXPR
     172             :     time_type operator-=(const date_duration_type& dd)
     173             :     {
     174             :       time_ = (time_system::get_time_rep(date() - dd, time_of_day()));
     175             :       return time_type(time_);
     176             :     }
     177             :     //! add time durations
     178             :     BOOST_CXX14_CONSTEXPR
     179          14 :     time_type operator+(const time_duration_type& td) const
     180             :     {
     181          14 :       return time_type(time_system::add_time_duration(time_, td));
     182             :     }
     183             :     BOOST_CXX14_CONSTEXPR
     184             :     time_type operator+=(const time_duration_type& td)
     185             :     {
     186             :       time_ = time_system::add_time_duration(time_,td);
     187             :       return time_type(time_);
     188             :     }
     189             :     //! subtract time durations
     190             :     BOOST_CXX14_CONSTEXPR
     191             :     time_type operator-(const time_duration_type& rhs) const
     192             :     {
     193             :       return time_system::subtract_time_duration(time_, rhs);
     194             :     }
     195             :     BOOST_CXX14_CONSTEXPR
     196             :     time_type operator-=(const time_duration_type& td) 
     197             :     {
     198             :       time_ = time_system::subtract_time_duration(time_, td);
     199             :       return time_type(time_);
     200             :     }
     201             :     
     202             :   protected:
     203             :     time_rep_type time_;
     204             :   };
     205             : 
     206             : 
     207             : 
     208             : 
     209             : 
     210             : } } //namespace date_time::boost
     211             : 
     212             : 
     213             : #endif
     214             : 

Generated by: LCOV version 1.16