8#ifndef INCLUDED_BDLT_DAYOFWEEKSET
9#define INCLUDED_BDLT_DAYOFWEEKSET
255#include <bdlscm_version.h>
270#include <bsl_cstddef.h>
271#include <bsl_iosfwd.h>
272#include <bsl_iterator.h>
285#if defined(BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD)
290 :
public bsl::iterator<bsl::bidirectional_iterator_tag,
291 const DayOfWeek::Enum>
405 unsigned char d_days;
412 template <
class HASHALG>
511 template <
class STREAM>
557 template <
class STREAM>
569 bsl::ostream&
print(bsl::ostream& stream,
571 int spacesPerLevel = 4)
const;
573#ifndef BDE_OPENSOURCE_PUBLICATION
632template <
class HASHALG>
653: d_data(original.d_data)
654, d_index(original.d_index)
707 const DayOfWeekSet_Iter& rhs)
714 return lhs.d_index == rhs.d_index;
719 const DayOfWeekSet_Iter& rhs)
749: d_days(original.d_days)
770 d_days =
static_cast<unsigned char>(d_days | rhs.d_days);
777 d_days =
static_cast<unsigned char>(d_days & rhs.d_days);
784 d_days =
static_cast<unsigned char>(d_days ^ rhs.d_days);
791 const int mask = d_days & rhs.d_days;
792 d_days =
static_cast<unsigned char>(d_days - mask);
799 d_days =
static_cast<unsigned char>(d_days | (1 << value));
805 const int mask = 1 << value;
806 const bool rv = d_days & mask;
807 d_days &=
static_cast<unsigned char>(~mask);
819template <
class STREAM>
826 stream.getUint8(tmp);
828 if (stream && 0 == (tmp & 1)) {
847 return set.d_days == (d_days & set.d_days);
871 const int mask = 1 << value;
872 return mask == (d_days & mask);
895template <
class STREAM>
901 stream.putUint8(d_days);
911#ifndef BDE_OPENSOURCE_PUBLICATION
927 DayOfWeekSet tmp(set);
928 tmp.d_days =
static_cast<unsigned char>(~tmp.d_days & 0xfe);
935 return lhs.d_days ==
rhs.d_days;
941 return lhs.d_days !=
rhs.d_days;
946 const DayOfWeekSet& rhs)
948 return DayOfWeekSet(lhs) |=
rhs;
953 const DayOfWeekSet& rhs)
955 return DayOfWeekSet(lhs) &=
rhs;
960 const DayOfWeekSet& rhs)
962 return DayOfWeekSet(lhs) ^=
rhs;
967 const DayOfWeekSet& rhs)
969 return DayOfWeekSet(lhs) -=
rhs;
973bsl::ostream&
bdlt::operator<<(bsl::ostream& stream,
const DayOfWeekSet& rhs)
975 return rhs.print(stream, 0, -1);
979template <
class HASHALG>
983 using ::BloombergLP::bslh::hashAppend;
Definition bdlt_dayofweekset.h:293
DayOfWeekSet_Iter & operator--()
bsl::bidirectional_iterator_tag iterator_category
Definition bdlt_dayofweekset.h:297
const DayOfWeek::Enum & reference
Definition bdlt_dayofweekset.h:301
DayOfWeekSet_Iter()
Create a default (invalid) iterator.
Definition bdlt_dayofweekset.h:645
bsl::ptrdiff_t difference_type
Definition bdlt_dayofweekset.h:299
DayOfWeekSet_Iter & operator++()
friend bool operator==(const DayOfWeekSet_Iter &, const DayOfWeekSet_Iter &)
static const DayOfWeek::Enum s_dayOfWeekArray[9]
Definition bdlt_dayofweekset.h:304
DayOfWeek::Enum value_type
Definition bdlt_dayofweekset.h:298
DayOfWeekSet_Iter & operator=(const DayOfWeekSet_Iter &rhs)
Definition bdlt_dayofweekset.h:669
~DayOfWeekSet_Iter()
Destroy this iterator.
Definition bdlt_dayofweekset.h:659
unsigned char d_data
Definition bdlt_dayofweekset.h:307
const DayOfWeek::Enum * pointer
Definition bdlt_dayofweekset.h:300
signed char d_index
Definition bdlt_dayofweekset.h:309
DayOfWeekSet_Iter(int data, int index)
const DayOfWeek::Enum & operator*() const
Definition bdlt_dayofweekset.h:694
Definition bdlt_dayofweekset.h:402
DayOfWeekSet_Iter iterator
Standard nested alias for set container's iterator.
Definition bdlt_dayofweekset.h:419
bool isEmpty() const
Definition bdlt_dayofweekset.h:863
bool remove(DayOfWeek::Enum value)
Definition bdlt_dayofweekset.h:803
friend bool operator==(const DayOfWeekSet &, const DayOfWeekSet &)
static int maxSupportedBdexVersion()
Definition bdlt_dayofweekset.h:914
DayOfWeekSet & operator&=(const DayOfWeekSet &rhs)
Definition bdlt_dayofweekset.h:775
DayOfWeekSet()
Create an empty set.
Definition bdlt_dayofweekset.h:742
friend DayOfWeekSet operator~(const DayOfWeekSet &)
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bdlt_dayofweekset.h:820
iterator end() const
Definition bdlt_dayofweekset.h:857
bool areMembers(const DayOfWeekSet &set) const
Definition bdlt_dayofweekset.h:845
int length() const
Return the number of elements in this set.
Definition bdlt_dayofweekset.h:876
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
bsl::reverse_iterator< iterator > reverse_iterator
Standard nested alias for set container's reverse iterator.
Definition bdlt_dayofweekset.h:425
reverse_iterator rbegin() const
Definition bdlt_dayofweekset.h:882
reverse_iterator const_reverse_iterator
Standard nested alias for set container's constant reverse iterator.
Definition bdlt_dayofweekset.h:428
friend bool operator!=(const DayOfWeekSet &, const DayOfWeekSet &)
iterator begin() const
Return an iterator referencing the first valid element in this set.
Definition bdlt_dayofweekset.h:851
~DayOfWeekSet()
Destroy this object.
Definition bdlt_dayofweekset.h:754
iterator const_iterator
Standard nested alias for set container's constant iterator.
Definition bdlt_dayofweekset.h:422
bool isMember(DayOfWeek::Enum value) const
Definition bdlt_dayofweekset.h:869
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bdlt_dayofweekset.h:896
reverse_iterator rend() const
Definition bdlt_dayofweekset.h:888
friend void hashAppend(HASHALG &hashAlg, const DayOfWeekSet &)
void add(DayOfWeek::Enum value)
Add the specified value to this set.
Definition bdlt_dayofweekset.h:797
DayOfWeekSet & operator-=(const DayOfWeekSet &rhs)
Definition bdlt_dayofweekset.h:789
void removeAll()
Remove all members of this set.
Definition bdlt_dayofweekset.h:812
DayOfWeekSet & operator|=(const DayOfWeekSet &rhs)
Definition bdlt_dayofweekset.h:768
DayOfWeekSet & operator^=(const DayOfWeekSet &rhs)
Definition bdlt_dayofweekset.h:782
DayOfWeekSet & operator=(const DayOfWeekSet &rhs)
Definition bdlt_dayofweekset.h:761
#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
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
Definition bbldc_basicisma30360.h:112
bool operator==(const Calendar &lhs, const Calendar &rhs)
Date operator-(const Date &date, int numDays)
DayOfWeekSet operator&(const DayOfWeekSet &lhs, const DayOfWeekSet &rhs)
DayOfWeekSet operator|(const DayOfWeekSet &lhs, const DayOfWeekSet &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, const Calendar &calendar)
DayOfWeekSet operator^(const DayOfWeekSet &lhs, const DayOfWeekSet &rhs)
void hashAppend(HASHALG &hashAlg, const Calendar &object)
bool operator!=(const Calendar &lhs, const Calendar &rhs)
DayOfWeekSet operator~(const DayOfWeekSet &set)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bdlbb_blob.h:579
static int numBitsSet(unsigned int value)
Return the number of 1 bits in the specified value.
Definition bdlb_bitutil.h:362
Enum
Enumerated day-of-week values.
Definition bdlt_dayofweek.h:125
Definition bslmf_isbitwisecopyable.h:298