8#ifndef INCLUDED_BDLT_DATETIMEINTERVAL
9#define INCLUDED_BDLT_DATETIMEINTERVAL
167#include <bdlscm_version.h>
185#include <bsl_cstdint.h>
186#include <bsl_limits.h>
187#include <bsl_iosfwd.h>
207 k_DEFAULT_FRACTIONAL_SECOND_PRECISION = 6
224 template <
class HASHALG>
583 template <
class STREAM>
648 int fractionalSecondPrecision = 6)
const;
702 template <
class STREAM>
718 bsl::ostream&
print(bsl::ostream& stream,
720 int spacesPerLevel = 4)
const;
722#ifndef BDE_OPENSOURCE_PUBLICATION
733#ifndef BDE_OMIT_INTERNAL_DEPRECATED
816template <
class HASHALG>
834 if (versionSelector >= 20170401) {
866: d_days(original.d_days)
867, d_microseconds(original.d_microseconds)
876 d_microseconds = rhs.d_microseconds;
883#ifdef BSLS_ASSERT_IS_USED
885 BSLS_ASSERT(0 == rc &&
"operator+= over/under flow"); (void) rc;
887 addInterval(rhs.d_days, 0, 0, 0, 0, rhs.d_microseconds);
896 Int64 rhsDays = rhs.d_days;
897 Int64 rhsMicroseconds = rhs.d_microseconds;
898 if (INT_MIN == rhsDays) {
903 rhsMicroseconds = -rhsMicroseconds;
906#ifdef BSLS_ASSERT_IS_USED
908 static_cast<int>(rhsDays), 0, 0, 0, 0, rhsMicroseconds);
909 BSLS_ASSERT(0 == rc &&
"operator-= over/under flow"); (void) rc;
911 addInterval(
static_cast<int>(rhsDays), 0, 0, 0, 0, rhsMicroseconds);
1111template <
class STREAM>
1118 stream.getInt32(tmpDays);
1121 stream.getInt64(tmpMicroseconds);
1124 && ( (0 <= tmpDays && 0 <= tmpMicroseconds)
1125 || (0 >= tmpDays && 0 >= tmpMicroseconds))
1128 assign(tmpDays, tmpMicroseconds);
1131 stream.invalidate();
1136 stream.getInt64(tmp);
1139 && k_MILLISECONDS_MIN <= tmp && k_MILLISECONDS_MAX >= tmp) {
1143 stream.invalidate();
1147 stream.invalidate();
1164 return d_microseconds;
1231 static_cast<double>(d_microseconds) /
1246 || (bsl::numeric_limits<bsls::Types::Int64>::max() -
1249#if !defined(BSLS_PLATFORM_CMP_SUN) \
1250 || !defined(BDE_BUILD_TARGET_OPT) \
1251 || BSLS_PLATFORM_CMP_VERSION >= 0x5140
1257 || (bsl::numeric_limits<bsls::Types::Int64>::min() -
1268template <
class STREAM>
1274 stream.putInt32(d_days);
1275 stream.putInt64(d_microseconds);
1281 stream.invalidate();
1288#ifndef BDE_OPENSOURCE_PUBLICATION
1298#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1312 const DatetimeInterval& rhs)
1314 DatetimeInterval ret(lhs);
1316#ifdef BSLS_ASSERT_IS_USED
1317 int rc = ret.addIntervalIfValid(0, 0, 0, 0,
1318 rhs.totalMilliseconds(), rhs.microseconds());
1319 BSLS_ASSERT(0 == rc &&
"operator+ over/under flow"); (void) rc;
1321 ret.addInterval(0, 0, 0, 0, rhs.totalMilliseconds(), rhs.microseconds());
1329 const DatetimeInterval& rhs)
1331 DatetimeInterval ret(lhs);
1333#ifdef BSLS_ASSERT_IS_USED
1334 int rc = ret.addIntervalIfValid(0, 0, 0, 0,
1335 -
rhs.totalMilliseconds(), -
rhs.microseconds());
1336 BSLS_ASSERT(0 == rc &&
"operator- over/under flow"); (void) rc;
1338 ret.addInterval(0, 0, 0, 0, -
rhs.totalMilliseconds(), -
rhs.microseconds());
1347 BSLS_REVIEW(value.d_days > bsl::numeric_limits<int32_t>::min());
1349 DatetimeInterval interval;
1351 interval.d_days = -value.d_days;
1352 interval.d_microseconds = -value.d_microseconds;
1358bool bdlt::operator==(
const DatetimeInterval& lhs,
const DatetimeInterval& rhs)
1360 return lhs.d_days ==
rhs.d_days
1361 &&
lhs.d_microseconds ==
rhs.d_microseconds;
1365bool bdlt::operator!=(
const DatetimeInterval& lhs,
const DatetimeInterval& rhs)
1367 return lhs.d_days !=
rhs.d_days
1368 ||
lhs.d_microseconds !=
rhs.d_microseconds;
1373 const DatetimeInterval& rhs)
1375 return lhs.d_days <
rhs.d_days
1376 || (
lhs.d_days ==
rhs.d_days
1377 &&
lhs.d_microseconds <
rhs.d_microseconds);
1382 const DatetimeInterval& rhs)
1384 return lhs.d_days <
rhs.d_days
1385 || (
lhs.d_days ==
rhs.d_days
1386 &&
lhs.d_microseconds <=
rhs.d_microseconds);
1390bool bdlt::operator> (
const DatetimeInterval& lhs,
const DatetimeInterval& rhs)
1392 return lhs.d_days >
rhs.d_days
1393 || (
lhs.d_days ==
rhs.d_days
1394 &&
lhs.d_microseconds >
rhs.d_microseconds);
1398bool bdlt::operator>=(
const DatetimeInterval& lhs,
const DatetimeInterval& rhs)
1400 return lhs.d_days >
rhs.d_days
1401 || (
lhs.d_days ==
rhs.d_days
1402 &&
lhs.d_microseconds >=
rhs.d_microseconds);
1407 const DatetimeInterval&
object)
1409 return object.print(stream, 0, -1);
1413template <
class HASHALG>
1416 using ::BloombergLP::bslh::hashAppend;
Definition bdlt_datetimeinterval.h:201
int days() const
Definition bdlt_datetimeinterval.h:1156
friend DatetimeInterval operator-(const DatetimeInterval &)
int setIntervalIfValid(int days, bsls::Types::Int64 hours=0, bsls::Types::Int64 minutes=0, bsls::Types::Int64 seconds=0, bsls::Types::Int64 milliseconds=0, bsls::Types::Int64 microseconds=0)
friend bool operator>(const DatetimeInterval &, const DatetimeInterval &)
~DatetimeInterval()=default
int setTotalSecondsFromDoubleIfValid(double seconds)
int addSecondsIfValid(bsls::Types::Int64 seconds)
Definition bdlt_datetimeinterval.h:1060
int addIntervalIfValid(int days, bsls::Types::Int64 hours=0, bsls::Types::Int64 minutes=0, bsls::Types::Int64 seconds=0, bsls::Types::Int64 milliseconds=0, bsls::Types::Int64 microseconds=0)
bsls::Types::Int64 totalMinutes() const
Definition bdlt_datetimeinterval.h:1214
int totalDays() const
Definition bdlt_datetimeinterval.h:1201
DatetimeInterval & addMicroseconds(bsls::Types::Int64 microseconds)
Definition bdlt_datetimeinterval.h:1092
int milliseconds() const
Definition bdlt_datetimeinterval.h:1188
static const bsls::Types::Int64 k_MILLISECONDS_MIN
Definition bdlt_datetimeinterval.h:260
int seconds() const
Definition bdlt_datetimeinterval.h:1181
int addMinutesIfValid(bsls::Types::Int64 minutes)
Definition bdlt_datetimeinterval.h:1040
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bdlt_datetimeinterval.h:1112
void setTotalDays(int days)
Definition bdlt_datetimeinterval.h:918
int setTotalHoursIfValid(bsls::Types::Int64 hours)
Definition bdlt_datetimeinterval.h:932
DatetimeInterval & operator-=(const DatetimeInterval &rhs)
Definition bdlt_datetimeinterval.h:894
void setTotalMicroseconds(bsls::Types::Int64 microseconds)
Definition bdlt_datetimeinterval.h:987
DatetimeInterval & operator=(const DatetimeInterval &rhs)
Definition bdlt_datetimeinterval.h:873
bsls::Types::Int64 totalSeconds() const
Definition bdlt_datetimeinterval.h:1221
int setTotalMillisecondsIfValid(bsls::Types::Int64 milliseconds)
Definition bdlt_datetimeinterval.h:978
void setTotalMinutes(bsls::Types::Int64 minutes)
Definition bdlt_datetimeinterval.h:940
void setTotalMilliseconds(bsls::Types::Int64 milliseconds)
Definition bdlt_datetimeinterval.h:970
double totalSecondsAsDouble() const
Definition bdlt_datetimeinterval.h:1228
DatetimeInterval & addHours(bsls::Types::Int64 hours)
Definition bdlt_datetimeinterval.h:1011
int setTotalSecondsIfValid(bsls::Types::Int64 seconds)
Definition bdlt_datetimeinterval.h:962
int addMillisecondsIfValid(bsls::Types::Int64 milliseconds)
Definition bdlt_datetimeinterval.h:1081
void setTotalHours(bsls::Types::Int64 hours)
Definition bdlt_datetimeinterval.h:925
static bool isValid(int days, bsls::Types::Int64 hours=0, bsls::Types::Int64 minutes=0, bsls::Types::Int64 seconds=0, bsls::Types::Int64 milliseconds=0, bsls::Types::Int64 microseconds=0)
friend bool operator!=(const DatetimeInterval &, const DatetimeInterval &)
int minutes() const
Definition bdlt_datetimeinterval.h:1174
bsls::Types::Int64 fractionalDayInMicroseconds() const
Definition bdlt_datetimeinterval.h:1162
static int maxSupportedVersion()
Definition bdlt_datetimeinterval.h:1300
DatetimeInterval & addDays(int days)
Definition bdlt_datetimeinterval.h:994
int addMicrosecondsIfValid(bsls::Types::Int64 microseconds)
Definition bdlt_datetimeinterval.h:1101
DatetimeInterval & addInterval(int days, bsls::Types::Int64 hours=0, bsls::Types::Int64 minutes=0, bsls::Types::Int64 seconds=0, bsls::Types::Int64 milliseconds=0, bsls::Types::Int64 microseconds=0)
int hours() const
Definition bdlt_datetimeinterval.h:1168
int microseconds() const
Definition bdlt_datetimeinterval.h:1195
bsls::Types::Int64 totalMilliseconds() const
Definition bdlt_datetimeinterval.h:1236
bsl::ostream & streamOut(bsl::ostream &stream) const
int addHoursIfValid(bsls::Types::Int64 hours)
Definition bdlt_datetimeinterval.h:1021
void setInterval(int days, bsls::Types::Int64 hours=0, bsls::Types::Int64 minutes=0, bsls::Types::Int64 seconds=0, bsls::Types::Int64 milliseconds=0, bsls::Types::Int64 microseconds=0)
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
DatetimeInterval()
Create a time interval object having the value 0.
Definition bdlt_datetimeinterval.h:842
friend bool operator==(const DatetimeInterval &, const DatetimeInterval &)
int printToBuffer(char *result, int numBytes, int fractionalSecondPrecision=6) const
DatetimeInterval & operator+=(const DatetimeInterval &rhs)
Definition bdlt_datetimeinterval.h:881
void setTotalSecondsFromDouble(double seconds)
DatetimeInterval & addMinutes(bsls::Types::Int64 minutes)
Definition bdlt_datetimeinterval.h:1030
bsls::Types::Int64 totalMicroseconds() const
Definition bdlt_datetimeinterval.h:1243
int setTotalMinutesIfValid(bsls::Types::Int64 minutes)
Definition bdlt_datetimeinterval.h:947
int addDaysIfValid(int days)
Definition bdlt_datetimeinterval.h:1003
DatetimeInterval & addMilliseconds(bsls::Types::Int64 milliseconds)
Definition bdlt_datetimeinterval.h:1071
friend bool operator<=(const DatetimeInterval &, const DatetimeInterval &)
DatetimeInterval & addSeconds(bsls::Types::Int64 seconds)
Definition bdlt_datetimeinterval.h:1050
static int maxSupportedBdexVersion()
Definition bdlt_datetimeinterval.h:1292
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bdlt_datetimeinterval.h:1269
friend bool operator>=(const DatetimeInterval &, const DatetimeInterval &)
friend void hashAppend(HASHALG &, const DatetimeInterval &)
void setTotalSeconds(bsls::Types::Int64 seconds)
Definition bdlt_datetimeinterval.h:955
friend bool operator<(const DatetimeInterval &, const DatetimeInterval &)
static const bsls::Types::Int64 k_MILLISECONDS_MAX
Definition bdlt_datetimeinterval.h:256
bsls::Types::Int64 totalHours() const
Definition bdlt_datetimeinterval.h:1207
#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_REVIEW(X)
Definition bsls_review.h:1019
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
Definition bbldc_basicisma30360.h:112
bool operator>(const Date &lhs, const Date &rhs)
bool operator<(const Date &lhs, const Date &rhs)
bool operator==(const Calendar &lhs, const Calendar &rhs)
Date operator-(const Date &date, int numDays)
bool operator>=(const Date &lhs, const Date &rhs)
Date operator+(const Date &date, int numDays)
bsl::ostream & operator<<(bsl::ostream &stream, const Calendar &calendar)
bool operator<=(const Date &lhs, const Date &rhs)
void hashAppend(HASHALG &hashAlg, const Calendar &object)
bool operator!=(const Calendar &lhs, const Calendar &rhs)
Definition bdlat_valuetypefunctions.h:939
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
static const bsls::Types::Int64 k_M_PER_D
Definition bdlt_timeunitratio.h:292
static const bsls::Types::Int64 k_S_PER_M
Definition bdlt_timeunitratio.h:287
static const bsls::Types::Int64 k_MS_PER_S
Definition bdlt_timeunitratio.h:282
static const bsls::Types::Int64 k_US_PER_H
Definition bdlt_timeunitratio.h:279
static const bsls::Types::Int64 k_M_PER_H
Definition bdlt_timeunitratio.h:291
static const bsls::Types::Int64 k_US_PER_MS
Definition bdlt_timeunitratio.h:275
static const bsls::Types::Int64 k_US_PER_D
Definition bdlt_timeunitratio.h:280
static const bsls::Types::Int64 k_H_PER_D
Definition bdlt_timeunitratio.h:294
static const bsls::Types::Int64 k_US_PER_S
Definition bdlt_timeunitratio.h:277
static const bsls::Types::Int64 k_US_PER_M
Definition bdlt_timeunitratio.h:278
static const bsls::Types::Int64 k_S_PER_D
Definition bdlt_timeunitratio.h:289
static const bsls::Types::Int64 k_MILLISECONDS_PER_DAY
Definition bdlt_timeunitratio.h:251
static const bsls::Types::Int64 k_MS_PER_D
Definition bdlt_timeunitratio.h:285
long long Int64
Definition bsls_types.h:134