LCOV - code coverage report
Current view: top level - usr/include/boost/date_time - time.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 22 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_TIME_HPP___
       2             : #define DATE_TIME_TIME_HPP___
       3             : 
       4             : /* Copyright (c) 2002,2003,2005 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           0 :     base_time(const date_type& day, 
      62             :               const time_duration_type& td, 
      63             :               dst_flags dst=not_dst) :
      64           0 :       time_(time_system::get_time_rep(day, td, dst))
      65             :     {}
      66             :     base_time(special_values sv) :
      67             :       time_(time_system::get_time_rep(sv))
      68             :     {}
      69             :     base_time(const time_rep_type& rhs) :
      70             :       time_(rhs)
      71             :     {}
      72           0 :     date_type date() const
      73             :     {
      74           0 :       return time_system::get_date(time_);
      75             :     }
      76           0 :     time_duration_type time_of_day() const
      77             :     {
      78           0 :       return time_system::get_time_of_day(time_);
      79             :     }
      80             :     /*! Optional bool parameter will return time zone as an offset 
      81             :      * (ie "+07:00"). Empty string is returned for classes that do 
      82             :      * not use a time_zone */
      83           0 :     std::string zone_name(bool /*as_offset*/=false) const
      84             :     {
      85           0 :       return time_system::zone_name(time_);
      86             :     }
      87             :     /*! Optional bool parameter will return time zone as an offset 
      88             :      * (ie "+07:00"). Empty string is returned for classes that do 
      89             :      * not use a time_zone */
      90           0 :     std::string zone_abbrev(bool /*as_offset*/=false) const
      91             :     {
      92           0 :       return time_system::zone_name(time_);
      93             :     }
      94             :     //! An empty string is returned for classes that do not use a time_zone
      95           0 :     std::string zone_as_posix_string() const
      96             :     {
      97           0 :       return std::string();
      98             :     }
      99             : 
     100             :     //! check to see if date is not a value
     101           0 :     bool is_not_a_date_time()  const
     102             :     {
     103           0 :       return time_.is_not_a_date_time();
     104             :     }
     105             :     //! check to see if date is one of the infinity values
     106           0 :     bool is_infinity()  const
     107             :     {
     108           0 :       return (is_pos_infinity() || is_neg_infinity()); 
     109             :     }
     110             :     //! check to see if date is greater than all possible dates
     111           0 :     bool is_pos_infinity()  const
     112             :     {
     113           0 :       return time_.is_pos_infinity();
     114             :     }
     115             :     //! check to see if date is greater than all possible dates
     116           0 :     bool is_neg_infinity()  const
     117             :     {
     118           0 :       return time_.is_neg_infinity();
     119             :     }
     120             :     //! check to see if time is a special value
     121           0 :     bool is_special() const
     122             :     {
     123           0 :       return(is_not_a_date_time() || is_infinity());
     124             :     }
     125             :     //!Equality operator -- others generated by boost::equality_comparable
     126             :     bool operator==(const time_type& rhs) const
     127             :     {
     128             :       return time_system::is_equal(time_,rhs.time_);
     129             :     }
     130             :     //!Equality operator -- others generated by boost::less_than_comparable
     131             :     bool operator<(const time_type& rhs) const
     132             :     {
     133             :       return time_system::is_less(time_,rhs.time_);
     134             :     }
     135             :     //! difference between two times
     136             :     time_duration_type operator-(const time_type& rhs) const
     137             :     {
     138             :       return time_system::subtract_times(time_, rhs.time_);
     139             :     }
     140             :     //! add date durations
     141             :     time_type operator+(const date_duration_type& dd) const
     142             :     {
     143             :       return time_system::add_days(time_, dd);
     144             :     }
     145             :     time_type operator+=(const date_duration_type& dd)
     146             :     {
     147             :       time_ = (time_system::get_time_rep(date() + dd, time_of_day()));
     148             :       return time_type(time_);
     149             :     }
     150             :     //! subtract date durations
     151             :     time_type operator-(const date_duration_type& dd) const
     152             :     {
     153             :       return time_system::subtract_days(time_, dd);
     154             :     }
     155             :     time_type operator-=(const date_duration_type& dd)
     156             :     {
     157             :       time_ = (time_system::get_time_rep(date() - dd, time_of_day()));
     158             :       return time_type(time_);
     159             :     }
     160             :     //! add time durations
     161             :     time_type operator+(const time_duration_type& td) const
     162             :     {
     163             :       return time_type(time_system::add_time_duration(time_, td));
     164             :     }
     165             :     time_type operator+=(const time_duration_type& td)
     166             :     {
     167             :       time_ = (time_system::get_time_rep(date(), time_of_day() + td));
     168             :       return time_type(time_);
     169             :     }
     170             :     //! subtract time durations
     171             :     time_type operator-(const time_duration_type& rhs) const
     172             :     {
     173             :       return time_system::subtract_time_duration(time_, rhs);
     174             :     }
     175             :     time_type operator-=(const time_duration_type& td) 
     176             :     {
     177             :       time_ = (time_system::get_time_rep(date(), time_of_day() - td));
     178             :       return time_type(time_);
     179             :     }
     180             :     
     181             :   protected:
     182             :     time_rep_type time_;
     183             :   };
     184             : 
     185             : 
     186             : 
     187             : 
     188             : 
     189             : } } //namespace date_time::boost
     190             : 
     191             : 
     192             : #endif
     193             : 

Generated by: LCOV version 1.14