8#ifndef INCLUDED_BSLS_TIMEINTERVAL
9#define INCLUDED_BSLS_TIMEINTERVAL
168#include <bsls_assert.h>
175#if BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
177#include <type_traits>
183#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
190#if BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
191#define BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
197#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
206struct TimeInterval_IsDuration : std::false_type {
210template <
class REP,
class PER>
211struct TimeInterval_IsDuration<
std::chrono::duration<REP, PER> >
224struct TimeInterval_RepTraits {
226 static const bool k_IS_FLOAT =
227 std::is_floating_point<REP>::value
228 || std::chrono::treat_as_floating_point<REP>::value;
253template <
class REP,
class PERIOD>
254struct TimeInterval_DurationTraits {
261 static const bool k_IS_FLOAT = TimeInterval_RepTraits<REP>::k_IS_FLOAT;
267 static const bool k_IS_IMPLICIT = (std::nano::den % PERIOD::den == 0);
278 static const bool k_IMPLICIT_CONVERSION_ENABLED =
279 !k_IS_FLOAT && k_IS_IMPLICIT;
290 static const bool k_EXPLICIT_CONVERSION_ENABLED =
291 !k_IS_FLOAT && !k_IS_IMPLICIT;
311 k_MILLISECS_PER_SEC = 1000,
313 k_MICROSECS_PER_SEC = 1000000,
315 k_NANOSECS_PER_MICROSEC = 1000,
317 k_NANOSECS_PER_MILLISEC = 1000000,
319 k_NANOSECS_PER_SEC = 1000000000,
321 k_SECONDS_PER_MINUTE = 60,
323 k_SECONDS_PER_HOUR = 60 * k_SECONDS_PER_MINUTE,
325 k_SECONDS_PER_DAY = 24 * k_SECONDS_PER_HOUR
352#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
357 template <
class REP,
class PERIOD>
358 static bool isValid(
const std::chrono::duration<REP, PERIOD>& duration);
403#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
418 template <
class REP_TYPE,
class PERIOD_TYPE>
420 const std::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration,
421 typename std::enable_if<TimeInterval_DurationTraits<
423 PERIOD_TYPE>::k_IMPLICIT_CONVERSION_ENABLED,
425 template <
class REP_TYPE,
class PERIOD_TYPE>
427 const std::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration,
428 typename std::enable_if<TimeInterval_DurationTraits<
430 PERIOD_TYPE>::k_EXPLICIT_CONVERSION_ENABLED,
645#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
659 template <
class REP_TYPE,
class PERIOD_TYPE>
661 addDuration(
const std::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration,
662 typename std::enable_if<
663 TimeInterval_DurationTraits<REP_TYPE, PERIOD_TYPE>::
664 k_IMPLICIT_CONVERSION_ENABLED,
709 template <
class STREAM>
713#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
720 template <
class DURATION_TYPE>
721 bool isInDurationRange(
722 typename std::enable_if<TimeInterval_IsDuration<DURATION_TYPE>::value,
723 int>::type * = 0)
const;
792#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
802 template <
class DURATION_TYPE>
804 typename std::enable_if<
805 TimeInterval_IsDuration<DURATION_TYPE>::value &&
806 !TimeInterval_RepTraits<typename DURATION_TYPE::rep>::k_IS_FLOAT,
830 template <
class STREAM>
847 std::ostream&
print(std::ostream& stream,
849 int spacesPerLevel = 4)
const;
851#ifndef BDE_OPENSOURCE_PUBLICATION
861#ifndef BDE_OMIT_INTERNAL_DEPRECATED
873 template <
class STREAM>
958#if defined(BSLS_COMPILERFEATURES_SUPPORT_INLINE_NAMESPACE) && \
959 defined(BSLS_COMPILERFEATURES_SUPPORT_USER_DEFINED_LITERALS)
960inline namespace literals {
961inline namespace TimeIntervalLiterals {
970TimeInterval operator ""_h(
unsigned long long int hours);
979TimeInterval operator ""_min(
unsigned long long int minutes);
988TimeInterval operator ""_s(
unsigned long long int seconds);
994TimeInterval operator ""_ms(
unsigned long long int milliseconds);
1000TimeInterval operator ""_us(
unsigned long long int microseconds);
1006TimeInterval operator ""_ns(
unsigned long long int nanoseconds);
1029 return (lhs > 0 && LLONG_MAX - lhs >= rhs) ||
1047#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
1049template <
class REP,
class PERIOD>
1052 std::chrono::duration<long double> minValue =
1053 std::chrono::duration<long double>(LLONG_MIN);
1055 std::chrono::duration<long double> maxValue =
1056 std::chrono::duration<long double>(LLONG_MAX);
1058 const std::chrono::duration<long double> safeDuration =
1059 std::chrono::duration_cast<std::chrono::duration<long double> >(
1062 return (safeDuration >= minValue && safeDuration <= maxValue);
1086#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
1087template <
class REP_TYPE,
class PERIOD_TYPE>
1091 const std::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration,
1092 typename std::enable_if<TimeInterval_DurationTraits<
1094 PERIOD_TYPE>::k_IMPLICIT_CONVERSION_ENABLED,
1097 BSLS_ASSERT((isValid<REP_TYPE, PERIOD_TYPE>(duration)));
1098 using SecondsRatio = std::ratio<1>;
1099 using TimeIntervalSeconds =
1100 std::chrono::duration<bsls::Types::Int64, SecondsRatio>;
1101 using TimeIntervalNanoseconds = std::chrono::duration<int, std::nano>;
1104 std::chrono::duration_cast<TimeIntervalSeconds>(duration).count();
1105 const int k_NANOSECONDS =
1106 std::chrono::duration_cast<TimeIntervalNanoseconds>(
1107 duration - TimeIntervalSeconds(k_SECONDS)).count();
1111template <
class REP_TYPE,
class PERIOD_TYPE>
1115 const std::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration,
1116 typename std::enable_if<TimeInterval_DurationTraits<
1118 PERIOD_TYPE>::k_EXPLICIT_CONVERSION_ENABLED,
1121 BSLS_ASSERT((isValid<REP_TYPE, PERIOD_TYPE>(duration)));
1123 std::chrono::duration_cast<std::chrono::seconds>(duration).count();
1124 const int k_NANOSECONDS =
static_cast<int>(
1125 std::chrono::duration_cast<std::chrono::nanoseconds>(
1126 duration - std::chrono::seconds(k_SECONDS)).count());
1142 return addInterval(rhs.d_seconds, rhs.d_nanoseconds);
1157 return addInterval(-rhs.d_seconds, -rhs.d_nanoseconds);
1173 LLONG_MIN / k_SECONDS_PER_DAY <= days);
1182 LLONG_MIN / k_SECONDS_PER_HOUR <= hours);
1184 return addSeconds(hours * k_SECONDS_PER_HOUR);
1191 LLONG_MIN / k_SECONDS_PER_MINUTE <= minutes);
1193 return addSeconds(minutes * k_SECONDS_PER_MINUTE);
1202 if (d_seconds > 0 && d_nanoseconds < 0) {
1204 d_nanoseconds += k_NANOSECS_PER_SEC;
1206 else if (d_seconds < 0 && d_nanoseconds > 0) {
1208 d_nanoseconds -= k_NANOSECS_PER_SEC;
1217 return addInterval( milliseconds / k_MILLISECS_PER_SEC,
1218 static_cast<int>((milliseconds % k_MILLISECS_PER_SEC) *
1219 k_NANOSECS_PER_MILLISEC));
1225 return addInterval( microseconds / k_MICROSECS_PER_SEC,
1226 static_cast<int>((microseconds % k_MICROSECS_PER_SEC) *
1227 k_NANOSECS_PER_MICROSEC));
1234 static_cast<int>(
nanoseconds % k_NANOSECS_PER_SEC));
1243 LLONG_MIN / k_SECONDS_PER_DAY <= days);
1252 LLONG_MIN / k_SECONDS_PER_HOUR <= hours);
1261 LLONG_MIN / k_SECONDS_PER_MINUTE <= minutes);
1277 static_cast<int>((milliseconds % k_MILLISECS_PER_SEC) *
1278 k_NANOSECS_PER_MILLISEC));
1285 static_cast<int>((microseconds % k_MICROSECS_PER_SEC) *
1286 k_NANOSECS_PER_MICROSEC));
1294 static_cast<int>(
nanoseconds % k_NANOSECS_PER_SEC));
1297#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
1298template <
class REP_TYPE,
class PERIOD_TYPE>
1301TimeInterval::addDuration(
1302 const std::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration,
1303 typename std::enable_if<TimeInterval_DurationTraits<
1305 PERIOD_TYPE>::k_IMPLICIT_CONVERSION_ENABLED,
1308 BSLS_ASSERT((isValid<REP_TYPE, PERIOD_TYPE>(duration)));
1311 std::chrono::duration_cast<std::chrono::seconds>(duration).count();
1312 const int k_NANOSECONDS =
static_cast<int>(
1313 std::chrono::duration_cast<std::chrono::nanoseconds>(
1314 duration - std::chrono::seconds(k_SECONDS)).count());
1331 d_nanoseconds =
static_cast<int>(
nanoseconds % k_NANOSECS_PER_SEC);
1337 if (d_seconds > 0 && d_nanoseconds < 0) {
1339 d_nanoseconds += k_NANOSECS_PER_SEC;
1341 else if (d_seconds < 0 && d_nanoseconds > 0) {
1343 d_nanoseconds -= k_NANOSECS_PER_SEC;
1363template <
class STREAM>
1382 stream.invalidate();
1386 stream.invalidate();
1394#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
1395template <
class DURATION_TYPE>
1396bool TimeInterval::isInDurationRange(
1397 typename std::enable_if<TimeInterval_IsDuration<DURATION_TYPE>::value,
1400 using SecondsRatio = std::ratio<1>;
1401 using TimeIntervalSeconds =
1402 std::chrono::duration<bsls::Types::Int64, SecondsRatio>;
1403 using TimeIntervalNanoseconds = std::chrono::duration<int, std::nano>;
1404 using Period =
typename DURATION_TYPE::period;
1405 using LongDoubleTo = std::chrono::duration<long double, Period>;
1407 const LongDoubleTo MIN_VALUE =
1408 std::chrono::duration_cast<LongDoubleTo>(DURATION_TYPE::min());
1410 const LongDoubleTo MAX_VALUE =
1411 std::chrono::duration_cast<LongDoubleTo>(DURATION_TYPE::max());
1413 const LongDoubleTo value = std::chrono::duration_cast<LongDoubleTo>(
1414 TimeIntervalSeconds(
seconds()))
1415 + std::chrono::duration_cast<LongDoubleTo>(
1418 return (MIN_VALUE <= value && value <= MAX_VALUE);
1425 return d_nanoseconds;
1437 return d_seconds / k_SECONDS_PER_DAY;
1443 return d_seconds / k_SECONDS_PER_HOUR;
1449 return d_seconds / k_SECONDS_PER_MINUTE;
1462 LLONG_MIN / k_MILLISECS_PER_SEC <= d_seconds);
1464 d_nanoseconds / k_NANOSECS_PER_MILLISEC));
1467 return d_seconds * k_MILLISECS_PER_SEC
1468 + d_nanoseconds / k_NANOSECS_PER_MILLISEC;
1475 LLONG_MIN / k_MICROSECS_PER_SEC <= d_seconds);
1477 d_nanoseconds / k_NANOSECS_PER_MICROSEC));
1479 return d_seconds * k_MICROSECS_PER_SEC
1480 + d_nanoseconds / k_NANOSECS_PER_MICROSEC;
1487 LLONG_MIN / k_NANOSECS_PER_SEC <= d_seconds);
1491 return d_seconds * k_NANOSECS_PER_SEC + d_nanoseconds;
1494#ifdef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
1495template <
class DURATION_TYPE>
1498typename std::enable_if<
1499 TimeInterval_IsDuration<DURATION_TYPE>::value &&
1500 !TimeInterval_RepTraits<typename DURATION_TYPE::rep>::k_IS_FLOAT,
1501 DURATION_TYPE>::type
1502TimeInterval::asDuration()
const
1504 using SecondsRatio = std::ratio<1>;
1505 using TimeIntervalSeconds =
1506 std::chrono::duration<bsls::Types::Int64, SecondsRatio>;
1507 using TimeIntervalNanoseconds = std::chrono::duration<int, std::nano>;
1511 return (std::chrono::duration_cast<DURATION_TYPE>(TimeIntervalSeconds(
1513 + std::chrono::duration_cast<DURATION_TYPE>(TimeIntervalNanoseconds(
1521 return static_cast<double>(d_seconds) + d_nanoseconds /
1522 static_cast<double>(k_NANOSECS_PER_SEC);
1527template <
class STREAM>
1533 stream.putInt64(d_seconds);
1534 stream.putInt32(d_nanoseconds);
1537 stream.invalidate();
1545#ifndef BDE_OPENSOURCE_PUBLICATION
1555#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1562template <
class STREAM>
1566 return print(stream, 0, -1);
1576 const TimeInterval& rhs)
1578 TimeInterval result(lhs);
1579 return result.addInterval(rhs.seconds(), rhs.nanoseconds());
1585 return lhs + TimeInterval(rhs);
1591 return TimeInterval(lhs) +
rhs;
1596 const TimeInterval& rhs)
1601 TimeInterval result(lhs);
1602 result.addInterval(-
rhs.seconds(), -
rhs.nanoseconds());
1609 return lhs - TimeInterval(rhs);
1615 return TimeInterval(lhs) -
rhs;
1623 return TimeInterval(-
rhs.seconds(), -
rhs.nanoseconds());
1629 return lhs.seconds() ==
rhs.seconds()
1630 &&
lhs.nanoseconds() ==
rhs.nanoseconds();
1636 return lhs == TimeInterval(rhs);
1642 return TimeInterval(lhs) ==
rhs;
1648 return lhs.seconds() !=
rhs.seconds()
1649 ||
lhs.nanoseconds() !=
rhs.nanoseconds();
1655 return lhs != TimeInterval(rhs);
1661 return TimeInterval(lhs) !=
rhs;
1665bool bsls::operator< (
const TimeInterval& lhs,
const TimeInterval& rhs)
1667 return lhs.seconds() <
rhs.seconds()
1668 || (
lhs.seconds() ==
rhs.seconds()
1669 &&
lhs.nanoseconds() <
rhs.nanoseconds());
1675 return lhs < TimeInterval(rhs);
1681 return TimeInterval(lhs) <
rhs;
1687 return lhs.seconds() <
rhs.seconds()
1688 || (
lhs.seconds() ==
rhs.seconds()
1689 &&
lhs.nanoseconds() <=
rhs.nanoseconds());
1695 return lhs <= TimeInterval(rhs);
1701 return TimeInterval(lhs) <=
rhs;
1705bool bsls::operator> (
const TimeInterval& lhs,
const TimeInterval& rhs)
1707 return lhs.seconds() >
rhs.seconds()
1708 || (
lhs.seconds() ==
rhs.seconds()
1709 &&
lhs.nanoseconds() >
rhs.nanoseconds());
1715 return lhs > TimeInterval(rhs);
1721 return TimeInterval(lhs) >
rhs;
1727 return lhs.seconds() >
rhs.seconds()
1728 || (
lhs.seconds() ==
rhs.seconds()
1729 &&
lhs.nanoseconds() >=
rhs.nanoseconds());
1735 return lhs >= TimeInterval(rhs);
1741 return TimeInterval(lhs) >=
rhs;
1744#if defined(BSLS_COMPILERFEATURES_SUPPORT_INLINE_NAMESPACE) && \
1745 defined(BSLS_COMPILERFEATURES_SUPPORT_USER_DEFINED_LITERALS)
1749 unsigned long long int hours)
1757 unsigned long long int minutes)
1765 unsigned long long int seconds)
1773 unsigned long long int milliseconds)
1778 return TimeInterval(milliseconds / k_MILLISECS_PER_SEC,
1779 static_cast<int>((milliseconds % k_MILLISECS_PER_SEC) *
1780 k_NANOSECS_PER_MILLISEC));
1785 unsigned long long int microseconds)
1790 return TimeInterval(microseconds / k_MICROSECS_PER_SEC,
1791 static_cast<int>((microseconds % k_MICROSECS_PER_SEC) *
1792 k_NANOSECS_PER_MICROSEC));
1797 unsigned long long int nanoseconds)
1801 return TimeInterval(nanoseconds / k_NANOSECS_PER_SEC,
1802 static_cast<int>(nanoseconds % k_NANOSECS_PER_SEC));
1828#undef BSLS_TIMEINTERVAL_PROVIDES_CHRONO_CONVERSIONS
Definition bsls_timeinterval.h:307
BSLS_KEYWORD_CONSTEXPR bsls::Types::Int64 totalMinutes() const
Definition bsls_timeinterval.h:1447
BSLS_KEYWORD_CONSTEXPR TimeInterval()
Definition bsls_timeinterval.h:1068
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalHours(bsls::Types::Int64 hours)
Definition bsls_timeinterval.h:1249
TimeInterval & addMicroseconds(bsls::Types::Int64 microseconds)
Definition bsls_timeinterval.h:1223
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalDays(bsls::Types::Int64 days)
Definition bsls_timeinterval.h:1240
BSLS_KEYWORD_CONSTEXPR int nanoseconds() const
Definition bsls_timeinterval.h:1423
TimeInterval & operator-=(const TimeInterval &rhs)
Definition bsls_timeinterval.h:1153
TimeInterval & addNanoseconds(bsls::Types::Int64 nanoseconds)
Definition bsls_timeinterval.h:1231
TimeInterval & addInterval(bsls::Types::Int64 seconds, int nanoseconds=0)
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalNanoseconds(bsls::Types::Int64 nanoseconds)
Definition bsls_timeinterval.h:1291
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalSeconds(bsls::Types::Int64 seconds)
Definition bsls_timeinterval.h:1267
BSLS_KEYWORD_CONSTEXPR bsls::Types::Int64 totalSeconds() const
Definition bsls_timeinterval.h:1453
TimeInterval & operator=(const TimeInterval &rhs)=default
TimeInterval & addMilliseconds(bsls::Types::Int64 milliseconds)
Definition bsls_timeinterval.h:1215
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bsls_timeinterval.h:1364
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalMinutes(bsls::Types::Int64 minutes)
Definition bsls_timeinterval.h:1258
BSLS_KEYWORD_CONSTEXPR_CPP14 TimeInterval & addHours(bsls::Types::Int64 hours)
Definition bsls_timeinterval.h:1179
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalMilliseconds(bsls::Types::Int64 milliseconds)
Definition bsls_timeinterval.h:1274
TimeInterval & operator+=(const TimeInterval &rhs)
Definition bsls_timeinterval.h:1140
BSLS_KEYWORD_CONSTEXPR_CPP14 bsls::Types::Int64 totalMicroseconds() const
Definition bsls_timeinterval.h:1472
static BSLS_KEYWORD_CONSTEXPR bool isValid(bsls::Types::Int64 seconds, int nanoseconds)
Definition bsls_timeinterval.h:1041
double totalSecondsAsDouble() const
Definition bsls_timeinterval.h:1519
STREAM & streamOut(STREAM &stream) const
Definition bsls_timeinterval.h:1564
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bsls_timeinterval.h:1528
std::ostream & print(std::ostream &stream, int level=0, int spacesPerLevel=4) const
BSLS_KEYWORD_CONSTEXPR_CPP14 void setIntervalRaw(bsls::Types::Int64 seconds, int nanoseconds=0)
Definition bsls_timeinterval.h:1349
TimeInterval(double seconds)
static int maxSupportedBdexVersion()
Definition bsls_timeinterval.h:1549
BSLS_KEYWORD_CONSTEXPR_CPP14 bsls::Types::Int64 totalNanoseconds() const
Definition bsls_timeinterval.h:1484
BSLS_KEYWORD_CONSTEXPR bsls::Types::Int64 totalDays() const
Definition bsls_timeinterval.h:1435
BSLS_KEYWORD_CONSTEXPR bsls::Types::Int64 seconds() const
Definition bsls_timeinterval.h:1429
BSLS_KEYWORD_CONSTEXPR bsls::Types::Int64 totalHours() const
Definition bsls_timeinterval.h:1441
TimeInterval(const TimeInterval &original)=default
BSLS_KEYWORD_CONSTEXPR_CPP14 TimeInterval & addSeconds(bsls::Types::Int64 seconds)
Definition bsls_timeinterval.h:1197
BSLS_KEYWORD_CONSTEXPR_CPP14 TimeInterval & addMinutes(bsls::Types::Int64 minutes)
Definition bsls_timeinterval.h:1188
static int maxSupportedVersion()
Definition bsls_timeinterval.h:1557
BSLS_KEYWORD_CONSTEXPR_CPP14 bsls::Types::Int64 totalMilliseconds() const
Definition bsls_timeinterval.h:1459
BSLS_KEYWORD_CONSTEXPR_CPP14 TimeInterval & addDays(bsls::Types::Int64 days)
Definition bsls_timeinterval.h:1170
BSLS_KEYWORD_CONSTEXPR_CPP14 void setTotalMicroseconds(bsls::Types::Int64 microseconds)
Definition bsls_timeinterval.h:1282
BSLS_KEYWORD_CONSTEXPR_CPP14 void setInterval(bsls::Types::Int64 seconds, int nanoseconds=0)
Definition bsls_timeinterval.h:1320
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR_CPP14
Definition bsls_keyword.h:631
#define BSLS_KEYWORD_CONSTEXPR
Definition bsls_keyword.h:624
#define BSLS_PRECONDITIONS_END()
Definition bsls_preconditions.h:131
#define BSLS_PRECONDITIONS_BEGIN()
Definition bsls_preconditions.h:130
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bdlt_iso8601util.h:707
TimeInterval operator+(const TimeInterval &lhs, const TimeInterval &rhs)
bool operator>=(const TimeInterval &lhs, const TimeInterval &rhs)
TimeInterval operator-(const TimeInterval &lhs, const TimeInterval &rhs)
bool operator==(const TimeInterval &lhs, const TimeInterval &rhs)
bool operator>(const TimeInterval &lhs, const TimeInterval &rhs)
bool operator!=(const TimeInterval &lhs, const TimeInterval &rhs)
bool operator<=(const TimeInterval &lhs, const TimeInterval &rhs)
std::ostream & operator<<(std::ostream &stream, const TimeInterval &timeInterval)
bool operator<(const TimeInterval &lhs, const TimeInterval &rhs)
Definition bdldfp_decimal.h:5549
long long Int64
Definition bsls_types.h:134