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