8#ifndef INCLUDED_BDLT_CALENDAR
9#define INCLUDED_BDLT_CALENDAR
516#include <bdlscm_version.h>
539#include <bsl_iosfwd.h>
540#include <bsl_iterator.h>
545class Calendar_BusinessDayConstIter;
585 template <
class HASHALG>
597 void synchronizeCache();
604 bool isCacheSynchronized()
const;
887 template <
class STREAM>
1299 template <
class STREAM>
1312 bsl::ostream&
print(bsl::ostream& stream,
1314 int spacesPerLevel = 4)
const;
1316#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1328#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1379template <
class HASHALG>
1405 int d_currentOffset;
1432 const Date& firstDateOfCalendar,
1433 const Date& startDate,
1679template <
class STREAM>
1689 d_packedCalendar.
swap(inCal);
1739 return d_packedCalendar.beginHolidayCodes(date);
1746 return d_packedCalendar.beginHolidayCodes(iter);
1801 return d_packedCalendar.endHolidayCodes(date);
1808 return d_packedCalendar.endHolidayCodes(iter);
1845 enum { e_SUCCESS = 0, e_FAILURE = 1 };
1847 int offset =
static_cast<int>(
1850 *nextBusinessDay =
firstDate() + offset;
1861 return d_packedCalendar.
holiday(index);
1879 return d_packedCalendar.
isHoliday(date);
1885 return d_packedCalendar.
isInRange(date);
1895 return d_nonBusinessDays[date -
firstDate()];
1913 return d_packedCalendar.
lastDate();
1919 return static_cast<int>(d_nonBusinessDays.
length());
1925 return static_cast<int>(d_nonBusinessDays.
num0());
1937 return static_cast<int>(d_nonBusinessDays.
num0(beginDate -
firstDate(),
1962 return static_cast<int>(d_nonBusinessDays.
num1());
1980 return d_packedCalendar;
2096template <
class STREAM>
2108 int spacesPerLevel)
const
2110 return d_packedCalendar.
print(stream, level, spacesPerLevel);
2113#ifndef BDE_OMIT_INTERNAL_DEPRECATED
2130 return lhs.d_packedCalendar == rhs.d_packedCalendar;
2136 return lhs.d_packedCalendar !=
rhs.d_packedCalendar;
2140bsl::ostream&
bdlt::operator<<(bsl::ostream& stream,
const Calendar& calendar)
2142 calendar.print(stream, 0, -1);
2147template <
class HASHALG>
2151 using ::BloombergLP::bslh::hashAppend;
2152 hashAppend(hashAlg,
object.d_packedCalendar);
2163Calendar_BusinessDayConstIter::Calendar_BusinessDayConstIter(
2165: d_nonBusinessDays_p(original.d_nonBusinessDays_p)
2166, d_firstDate(original.d_firstDate)
2167, d_currentOffset(original.d_currentOffset)
2181 d_nonBusinessDays_p = rhs.d_nonBusinessDays_p;
2182 d_firstDate = rhs.d_firstDate;
2183 d_currentOffset = rhs.d_currentOffset;
2192 d_currentOffset =
static_cast<int>(
2200 if (-1 == d_currentOffset) {
2201 d_currentOffset =
static_cast<int>(d_nonBusinessDays_p->
2202 find0AtMaxIndex(0, d_nonBusinessDays_p->
length()));
2205 d_currentOffset =
static_cast<int>(d_nonBusinessDays_p->
2206 find0AtMaxIndex(0, d_currentOffset));
2250 const Calendar_BusinessDayConstIter& rhs)
2254 return lhs.d_firstDate == rhs.d_firstDate
2255 && lhs.d_currentOffset == rhs.d_currentOffset;
2260 const Calendar_BusinessDayConstIter& rhs)
2264 return lhs.d_firstDate !=
rhs.d_firstDate
2265 ||
lhs.d_currentOffset !=
rhs.d_currentOffset;
Definition bdlc_bitarray.h:525
bsl::size_t num0(bsl::size_t begin=0, bsl::size_t end=k_INVALID_INDEX) const
Definition bdlc_bitarray.h:1892
bsl::size_t length() const
Return the number of bits in this array.
Definition bdlc_bitarray.h:1886
bsl::size_t num1(bsl::size_t begin=0, bsl::size_t end=k_INVALID_INDEX) const
Definition bdlc_bitarray.h:1904
void removeAll()
Definition bdlc_bitarray.h:1649
bsl::size_t find0AtMinIndex(bsl::size_t begin=0, bsl::size_t end=k_INVALID_INDEX) const
Definition bdlc_bitarray.h:1832
void assign0(bsl::size_t index)
Definition bdlc_bitarray.h:1484
void reserveCapacity(bsl::size_t numBits)
Definition bdlc_bitarray.h:1657
Definition bdlt_calendarreverseiteratoradapter.h:298
Definition bdlt_calendar.h:1395
friend bool operator==(const Calendar_BusinessDayConstIter &, const Calendar_BusinessDayConstIter &)
Date value_type
Definition bdlt_calendar.h:1438
int difference_type
Definition bdlt_calendar.h:1439
friend bool operator!=(const Calendar_BusinessDayConstIter &, const Calendar_BusinessDayConstIter &)
PackedCalendar_DateRef operator*() const
Definition bdlt_calendar.h:2234
PackedCalendar_DateProxy pointer
Definition bdlt_calendar.h:1440
PackedCalendar_DateRef reference
The star operator returns a PackedCalendar_DateRef by value.
Definition bdlt_calendar.h:1443
Calendar_BusinessDayConstIter & operator++()
Definition bdlt_calendar.h:2188
Calendar_BusinessDayConstIter & operator=(const Calendar_BusinessDayConstIter &rhs)
Definition bdlt_calendar.h:2178
PackedCalendar_DateProxy operator->() const
Definition bdlt_calendar.h:2240
bsl::bidirectional_iterator_tag iterator_category
Definition bdlt_calendar.h:1445
~Calendar_BusinessDayConstIter()
Destroy this object.
Definition bdlt_calendar.h:2172
Calendar_BusinessDayConstIter & operator--()
Definition bdlt_calendar.h:2198
Definition bdlt_calendar.h:570
int getNextBusinessDay(Date *nextBusinessDay, const Date &date, int nth) const
BusinessDayConstIterator endBusinessDays() const
Definition bdlt_calendar.h:1769
WeekendDaysTransitionConstIterator endWeekendDaysTransitions() const
Definition bdlt_calendar.h:1825
int numHolidayCodesTotal() const
Definition bdlt_calendar.h:1948
HolidayConstIterator beginHolidays() const
Definition bdlt_calendar.h:1750
PackedCalendar::WeekendDaysTransitionConstReverseIterator WeekendDaysTransitionConstReverseIterator
Definition bdlt_calendar.h:629
void removeHoliday(const Date &date)
Definition bdlt_calendar.h:1619
void unionBusinessDays(const Calendar &other)
Definition bdlt_calendar.h:1666
Calendar_BusinessDayConstIter BusinessDayConstIterator
Definition bdlt_calendar.h:608
int numNonBusinessDays() const
Definition bdlt_calendar.h:1960
static int maxSupportedBdexVersion()
Definition bdlt_calendar.h:2117
void unionNonBusinessDays(const Calendar &other)
Definition bdlt_calendar.h:1672
HolidayConstReverseIterator rendHolidays() const
Definition bdlt_calendar.h:2062
void addWeekendDay(DayOfWeek::Enum weekendDay)
Date getNextBusinessDay(const Date &initialDate) const
BusinessDayConstReverseIterator rendBusinessDays() const
Definition bdlt_calendar.h:2033
HolidayCodeConstReverseIterator rendHolidayCodes(const Date &date) const
Definition bdlt_calendar.h:2049
Date getNextBusinessDay(const Date &initialDate, int nth) const
PackedCalendar::WeekendDaysTransition WeekendDaysTransition
Definition bdlt_calendar.h:623
void setValidRange(const Date &firstDate, const Date &lastDate)
Definition bdlt_calendar.h:1647
PackedCalendar::HolidayCodeConstIterator HolidayCodeConstIterator
Definition bdlt_calendar.h:612
void removeHolidayCode(const Date &date, int holidayCode)
Definition bdlt_calendar.h:1629
bool isInRange(const Date &date) const
Definition bdlt_calendar.h:1883
HolidayCodeConstIterator beginHolidayCodes(const Date &date) const
Definition bdlt_calendar.h:1737
WeekendDaysTransitionConstReverseIterator rendWeekendDaysTransitions() const
Definition bdlt_calendar.h:2076
void addDay(const Date &date)
void addHoliday(const Date &date)
int holidayCode(const Date &date, int index) const
Definition bdlt_calendar.h:1865
HolidayCodeConstIterator endHolidayCodes(const Date &date) const
Definition bdlt_calendar.h:1799
void addWeekendDaysTransition(const Date &startDate, const DayOfWeekSet &weekendDays)
Definition bdlt_calendar.h:1578
PackedCalendar::HolidayConstIterator HolidayConstIterator
Definition bdlt_calendar.h:610
Calendar(bslma::Allocator *basicAllocator=0)
WeekendDaysTransition weekendDaysTransition(int index) const
Definition bdlt_calendar.h:2083
int getNextBusinessDay(Date *nextBusinessDay, const Date &date) const
Definition bdlt_calendar.h:1837
void unionNonBusinessDays(const PackedCalendar &other)
int numHolidayCodes(const Date &date) const
Definition bdlt_calendar.h:1942
bool isNonBusinessDay(const Date &date) const
Definition bdlt_calendar.h:1889
friend void hashAppend(HASHALG &hashAlg, const Calendar &)
HolidayConstReverseIterator rbeginHolidays() const
Definition bdlt_calendar.h:2013
WeekendDaysTransitionConstIterator beginWeekendDaysTransitions() const
Definition bdlt_calendar.h:1763
void addHolidayCode(const Date &date, int holidayCode)
BusinessDayConstReverseIterator rbeginBusinessDays() const
Definition bdlt_calendar.h:1984
void reserveHolidayCodeCapacity(int numHolidayCodes)
Definition bdlt_calendar.h:1641
const Date & firstDate() const
Definition bdlt_calendar.h:1831
bool isHoliday(const Date &date) const
Definition bdlt_calendar.h:1877
const Date & lastDate() const
Definition bdlt_calendar.h:1911
Calendar(const Calendar &original, bslma::Allocator *basicAllocator=0)
BusinessDayConstIterator beginBusinessDays() const
Definition bdlt_calendar.h:1709
bslma::Allocator * allocator() const
Return the allocator used by this object to supply memory.
Definition bdlt_calendar.h:2091
int numBusinessDays() const
Definition bdlt_calendar.h:1923
WeekendDaysTransitionConstReverseIterator rbeginWeekendDaysTransitions() const
Definition bdlt_calendar.h:2027
~Calendar()
Destroy this object.
int addHolidayCodeIfInRange(const Date &date, int holidayCode)
Definition bdlt_calendar.h:1558
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bdlt_calendar.h:1680
void intersectBusinessDays(const Calendar &other)
Definition bdlt_calendar.h:1593
void addWeekendDays(const DayOfWeekSet &weekendDays)
HolidayConstIterator endHolidays() const
Definition bdlt_calendar.h:1812
const PackedCalendar & packedCalendar() const
Definition bdlt_calendar.h:1978
Date holiday(int index) const
Definition bdlt_calendar.h:1859
void intersectNonBusinessDays(const Calendar &other)
Definition bdlt_calendar.h:1606
PackedCalendar::HolidayCodeConstReverseIterator HolidayCodeConstReverseIterator
Definition bdlt_calendar.h:621
void swap(Calendar &other)
Definition bdlt_calendar.h:1696
int length() const
Definition bdlt_calendar.h:1917
bool isWeekendDay(const Date &date) const
Definition bdlt_calendar.h:1899
void reserveHolidayCapacity(int numHolidays)
Definition bdlt_calendar.h:1635
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlt_calendar.h:2106
int numWeekendDaysTransitions() const
Definition bdlt_calendar.h:1972
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bdlt_calendar.h:2098
PackedCalendar::WeekendDaysTransitionConstIterator WeekendDaysTransitionConstIterator
Definition bdlt_calendar.h:626
HolidayCodeConstReverseIterator rbeginHolidayCodes(const Date &date) const
Definition bdlt_calendar.h:2000
bool isBusinessDay(const Date &date) const
Definition bdlt_calendar.h:1871
Calendar(const bdlt::PackedCalendar &packedCalendar, bslma::Allocator *basicAllocator=0)
PackedCalendar::HolidayConstReverseIterator HolidayConstReverseIterator
Definition bdlt_calendar.h:618
friend bool operator==(const Calendar &, const Calendar &)
Calendar & operator=(const Calendar &rhs)
Definition bdlt_calendar.h:1544
int numWeekendDaysInRange() const
Definition bdlt_calendar.h:1966
int numHolidays() const
Definition bdlt_calendar.h:1954
void unionBusinessDays(const PackedCalendar &other)
int addHolidayIfInRange(const Date &date)
Definition bdlt_calendar.h:1568
CalendarReverseIteratorAdapter< BusinessDayConstIterator > BusinessDayConstReverseIterator
Definition bdlt_calendar.h:615
friend bool operator!=(const Calendar &, const Calendar &)
Calendar(const Date &firstDate, const Date &lastDate, bslma::Allocator *basicAllocator=0)
void removeAll()
Definition bdlt_calendar.h:1612
Definition bdlt_date.h:294
Definition bdlt_dayofweekset.h:402
Definition bdlt_packedcalendar.h:1491
Definition bdlt_packedcalendar.h:1529
Definition bdlt_packedcalendar.h:1689
Definition bdlt_packedcalendar.h:1565
Definition bdlt_packedcalendar.h:593
void reserveHolidayCodeCapacity(int numHolidayCodes)
Definition bdlt_packedcalendar.h:2419
HolidayConstReverseIterator rbeginHolidays() const
Definition bdlt_packedcalendar.h:3182
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
int numWeekendDaysInRange() const
void setValidRange(const Date &firstDate, const Date &lastDate)
const Date & firstDate() const
Definition bdlt_packedcalendar.h:3003
int numHolidays() const
Definition bdlt_packedcalendar.h:3135
int numHolidayCodesTotal() const
Definition bdlt_packedcalendar.h:3129
void removeHoliday(const Date &date)
WeekendDaysTransitionConstReverseIterator rendWeekendDaysTransitions() const
Definition bdlt_packedcalendar.h:3256
HolidayCodeConstReverseIterator rendHolidayCodes(const Date &date) const
Definition bdlt_packedcalendar.h:3222
int holidayCode(const Date &date, int index) const
Definition bdlt_packedcalendar.h:3038
WeekendDaysTransitionConstIterator endWeekendDaysTransitions() const
Definition bdlt_packedcalendar.h:2997
WeekendDaysTransitionSequence::const_iterator WeekendDaysTransitionConstIterator
Definition bdlt_packedcalendar.h:648
void removeHolidayCode(const Date &date, int holidayCode)
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bdlt_packedcalendar.h:2429
void addWeekendDaysTransition(const Date &startDate, const DayOfWeekSet &weekendDays)
void reserveHolidayCapacity(int numHolidays)
Definition bdlt_packedcalendar.h:2410
HolidayConstIterator beginHolidays() const
Definition bdlt_packedcalendar.h:2926
const Date & lastDate() const
Definition bdlt_packedcalendar.h:3109
WeekendDaysTransitionPrivate WeekendDaysTransition
Definition bdlt_packedcalendar.h:630
bool isHoliday(const Date &date) const
Definition bdlt_packedcalendar.h:3064
HolidayCodeConstReverseIterator rbeginHolidayCodes(const Date &date) const
Definition bdlt_packedcalendar.h:3164
void swap(PackedCalendar &other)
void intersectNonBusinessDays(const PackedCalendar &other)
WeekendDaysTransition weekendDaysTransition(int index) const
Definition bdlt_packedcalendar.h:3264
HolidayConstIterator endHolidays() const
Definition bdlt_packedcalendar.h:2977
bool isInRange(const Date &date) const
Definition bdlt_packedcalendar.h:3079
void intersectBusinessDays(const PackedCalendar &other)
bsl::reverse_iterator< WeekendDaysTransitionSequence::const_iterator > WeekendDaysTransitionConstReverseIterator
Definition bdlt_packedcalendar.h:652
bslma::Allocator * allocator() const
Return the allocator used by this object to supply memory.
Definition bdlt_packedcalendar.h:3275
int length() const
Definition bdlt_packedcalendar.h:3117
bdlt::Date holiday(int index) const
Definition bdlt_packedcalendar.h:3029
static int maxSupportedBdexVersion()
Definition bdlt_packedcalendar.h:3366
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bdlt_packedcalendar.h:3281
int numWeekendDaysTransitions() const
Definition bdlt_packedcalendar.h:3141
WeekendDaysTransitionConstIterator beginWeekendDaysTransitions() const
Definition bdlt_packedcalendar.h:2946
HolidayConstReverseIterator rendHolidays() const
Definition bdlt_packedcalendar.h:3240
WeekendDaysTransitionConstReverseIterator rbeginWeekendDaysTransitions() const
Definition bdlt_packedcalendar.h:3198
bool isWeekendDay(const Date &date) const
int numHolidayCodes(const Date &date) const
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_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_PRECONDITIONS_END()
Definition bsls_preconditions.h:131
#define BSLS_PRECONDITIONS_BEGIN()
Definition bsls_preconditions.h:130
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
Definition bbldc_basicisma30360.h:112
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 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