8#ifndef INCLUDED_BDLT_TIMETABLE
9#define INCLUDED_BDLT_TIMETABLE
175#include <bdlscm_version.h>
194#include <bsl_algorithm.h>
195#include <bsl_cstddef.h>
196#include <bsl_iosfwd.h>
197#include <bsl_vector.h>
205class Timetable_ConstIterator;
280 bsl::ostream&
print(bsl::ostream& stream,
282 int spacesPerLevel = 4)
const;
327template <
class HASHALG>
450 bsl::ostream&
print(bsl::ostream& stream,
452 int spacesPerLevel = 4)
const;
499template <
class HASHALG>
521 int d_initialTransitionCode;
536 template <
class HASHALG>
622 bsl::size_t
size()
const;
662template <
class HASHALG>
687 int d_initialTransitionCode;
700 template <
class HASHALG>
937 bsl::ostream&
print(bsl::ostream& stream,
939 int spacesPerLevel = 4)
const;
975template <
class HASHALG>
994 bsl::size_t d_dayIndex;
998 bsl::size_t d_transitionIndex;
1024 bsl::size_t dayIndex,
1025 bsl::size_t transitionIndex);
1127TimetableTransition::TimetableTransition()
1129, d_code(k_UNSET_TRANSITION_CODE)
1134TimetableTransition::TimetableTransition(
const Datetime& datetime,
int code)
1135: d_datetime(datetime)
1140 BSLS_ASSERT(0 <= code || k_UNSET_TRANSITION_CODE == code);
1146: d_datetime(original.d_datetime)
1147, d_code(original.d_code)
1156 d_datetime = rhs.d_datetime;
1157 d_code = rhs.d_code;
1180 const TimetableTransition& rhs)
1182 return lhs.datetime() == rhs.datetime() && lhs.code() == rhs.code();
1187 const TimetableTransition& rhs)
1189 return lhs.datetime() !=
rhs.datetime() ||
lhs.code() !=
rhs.code();
1194 const TimetableTransition& rhs)
1196 return lhs.datetime() <
rhs.datetime()
1197 || (
lhs.datetime() ==
rhs.datetime() &&
lhs.code() <
rhs.code());
1201bool bdlt::operator<(
const TimetableTransition& lhs,
const Datetime& rhs)
1205 return lhs.datetime() <
rhs;
1209bool bdlt::operator<(
const Datetime& lhs,
const TimetableTransition& rhs)
1213 return lhs <
rhs.datetime();
1217template <
class HASHALG>
1221 using ::BloombergLP::bslh::hashAppend;
1235TimetableTransition_Ref::TimetableTransition_Ref()
1236: TimetableTransition()
1242TimetableTransition_Ref::TimetableTransition_Ref(
1249TimetableTransition_Ref::TimetableTransition_Ref(
1260 d_datetime = rhs.d_datetime;
1261 d_code = rhs.d_code;
1274, d_code(k_UNSET_TRANSITION_CODE)
1293: d_time(original.d_time)
1294, d_code(original.d_code)
1303 d_time = rhs.d_time;
1304 d_code = rhs.d_code;
1327 const Timetable_CompactableTransition& rhs)
1329 return lhs.time() == rhs.time() && lhs.code() == rhs.code();
1334 const Timetable_CompactableTransition& rhs)
1336 return lhs.time() !=
rhs.time() ||
lhs.code() !=
rhs.code();
1341 const Timetable_CompactableTransition& rhs)
1343 return lhs.time() <
rhs.time()
1344 || (
lhs.time() ==
rhs.time() &&
lhs.code() <
rhs.code());
1358 const Timetable_CompactableTransition& rhs)
1366template <
class HASHALG>
1369 const Timetable_CompactableTransition&
object)
1371 using ::BloombergLP::bslh::hashAppend;
1386: d_initialTransitionCode(k_UNSET_TRANSITION_CODE)
1387, d_transitions(basicAllocator)
1394: d_initialTransitionCode(original.d_initialTransitionCode)
1395, d_transitions(original.d_transitions, basicAllocator)
1403 d_initialTransitionCode = rhs.d_initialTransitionCode;
1404 d_transitions = rhs.d_transitions;
1414 d_transitions.clear();
1416 return code != d_initialTransitionCode;
1424 bool rv = d_initialTransitionCode != code && d_transitions.empty();
1426 d_initialTransitionCode = code;
1436 d_transitions.rbegin();
1438 return iter != d_transitions.rend()
1440 : d_initialTransitionCode;
1446 return d_initialTransitionCode;
1452 return d_transitions.size();
1461 return lhs.d_initialTransitionCode == rhs.d_initialTransitionCode
1462 && lhs.d_transitions == rhs.d_transitions;
1468 return lhs.d_initialTransitionCode !=
rhs.d_initialTransitionCode
1469 ||
lhs.d_transitions !=
rhs.d_transitions;
1473bool bdlt::operator<(
const Timetable_Day& lhs,
const Timetable_Day& rhs)
1475 return lhs.d_initialTransitionCode <
rhs.d_initialTransitionCode
1476 || (
lhs.d_initialTransitionCode ==
rhs.d_initialTransitionCode
1477 &&
lhs.d_transitions <
rhs.d_transitions);
1481template <
class HASHALG>
1485 using ::BloombergLP::bslh::hashAppend;
1487 hashAppend(hashAlg,
object.d_initialTransitionCode);
1518 d_firstDate =
Date(9999, 12, 31);
1519 d_lastDate =
Date( 1, 1, 1);
1521 d_timetable.removeAll();
1537 d_firstDate =
Date(9999, 12, 31);
1538 d_lastDate =
Date( 1, 1, 1);
1540 d_timetable.removeAll();
1553 &other.d_initialTransitionCode);
1578 return d_initialTransitionCode;
1584 return date >= d_firstDate && date <= d_lastDate;
1598 return d_firstDate <= d_lastDate ? d_lastDate - d_firstDate + 1 : 0;
1607 bsl::size_t index = date - d_firstDate;
1624 return d_timetable.allocator();
1633 return lhs.d_initialTransitionCode == rhs.d_initialTransitionCode
1634 && lhs.d_firstDate == rhs.d_firstDate
1635 && lhs.d_lastDate == rhs.d_lastDate
1636 && lhs.d_timetable == rhs.d_timetable;
1642 return lhs.d_initialTransitionCode !=
rhs.d_initialTransitionCode
1643 ||
lhs.d_firstDate !=
rhs.d_firstDate
1644 ||
lhs.d_lastDate !=
rhs.d_lastDate
1645 ||
lhs.d_timetable !=
rhs.d_timetable;
1650 const Timetable& timetable)
1652 return timetable.print(stream, 0, -1);
1659 if (a.allocator() == b.allocator()) {
1665 Timetable futureA(b, a.allocator());
1666 Timetable futureB(a, b.allocator());
1673template <
class HASHALG>
1677 using ::BloombergLP::bslh::hashAppend;
1681 hashAppend(hashAlg,
object.d_initialTransitionCode);
1694 const Timetable& timetable,
1695 bsl::size_t dayIndex,
1696 bsl::size_t transitionIndex)
1697: d_timetable_p(&timetable)
1698, d_dayIndex(dayIndex)
1699, d_transitionIndex(transitionIndex)
1708, d_transitionIndex(0)
1715: d_timetable_p(original.d_timetable_p)
1716, d_dayIndex(original.d_dayIndex)
1717, d_transitionIndex(original.d_transitionIndex)
1726 d_timetable_p = rhs.d_timetable_p;
1727 d_dayIndex = rhs.d_dayIndex;
1728 d_transitionIndex = rhs.d_transitionIndex;
1739 <
static_cast<bsl::size_t
>(d_timetable_p->
length()));
1741 < d_timetable_p->d_timetable[d_dayIndex].size());
1744 d_timetable_p->d_timetable[d_dayIndex].d_transitions[
1757 <
static_cast<bsl::size_t
>(d_timetable_p->
length()));
1768 Timetable_ConstIterator& iterator,
1771 const Timetable_ConstIterator curr = iterator;
1778 Timetable_ConstIterator& iterator,
1781 const Timetable_ConstIterator curr = iterator;
1788 const Timetable_ConstIterator& rhs)
1790 return lhs.d_timetable_p ==
rhs.d_timetable_p
1791 &&
lhs.d_dayIndex ==
rhs.d_dayIndex
1792 &&
lhs.d_transitionIndex ==
rhs.d_transitionIndex;
1797 const Timetable_ConstIterator& rhs)
1799 return lhs.d_timetable_p !=
rhs.d_timetable_p
1800 ||
lhs.d_dayIndex !=
rhs.d_dayIndex
1801 ||
lhs.d_transitionIndex !=
rhs.d_transitionIndex;
Definition bdlc_compactedarray.h:697
Definition bdlt_date.h:294
Definition bdlt_datetime.h:330
Date date() const
Return the value of the "date" part of this object.
Definition bdlt_datetime.h:2234
Time time() const
Return the value of the "time" part of this object.
Definition bdlt_datetime.h:2345
Definition bdlt_time.h:195
int hour() const
Return the value of the hour attribute of this time object.
Definition bdlt_time.h:926
Definition bslstl_vector.h:1120
bsl::reverse_iterator< const_iterator > const_reverse_iterator
Definition bslstl_vector.h:1155
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslma_allocator.h:545
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
Definition bbldc_basicisma30360.h:112
bool operator<(const Date &lhs, const Date &rhs)
Calendar_BusinessDayConstIter operator++(Calendar_BusinessDayConstIter &iterator, int)
Definition bdlt_calendar.h:2215
bool operator==(const Calendar &lhs, const Calendar &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, const Calendar &calendar)
void swap(Calendar &a, Calendar &b)
void hashAppend(HASHALG &hashAlg, const Calendar &object)
bool operator!=(const Calendar &lhs, const Calendar &rhs)
Calendar_BusinessDayConstIter operator--(Calendar_BusinessDayConstIter &iterator, int)
Definition bdlt_calendar.h:2224
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition baljsn_encoder_testtypes.h:76
Enum
Enumerated day-of-week values.
Definition bdlt_dayofweek.h:125
Definition bslma_usesbslmaallocator.h:344