11#ifndef INCLUDED_BSLSTL_QUEUE_CPP03
12#define INCLUDED_BSLSTL_QUEUE_CPP03
63#ifdef COMPILING_BSLSTL_QUEUE_H
78template <
class VALUE,
class CONTAINER = deque<VALUE> >
81#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
87 template <
class VALUE2,
class CONTAINER2>
88 friend bool operator==(
const queue<VALUE2, CONTAINER2>&,
89 const queue<VALUE2, CONTAINER2>&);
91 template <
class VALUE2,
class CONTAINER2>
92 friend bool operator!=(
const queue<VALUE2, CONTAINER2>&,
93 const queue<VALUE2, CONTAINER2>&);
95 template <
class VALUE2,
class CONTAINER2>
96 friend bool operator< (
const queue<VALUE2, CONTAINER2>&,
97 const queue<VALUE2, CONTAINER2>&);
99 template <
class VALUE2,
class CONTAINER2>
100 friend bool operator> (
const queue<VALUE2, CONTAINER2>&,
101 const queue<VALUE2, CONTAINER2>&);
103 template <
class VALUE2,
class CONTAINER2>
104 friend bool operator<=(
const queue<VALUE2, CONTAINER2>&,
105 const queue<VALUE2, CONTAINER2>&);
107 template <
class VALUE2,
class CONTAINER2>
108 friend bool operator>=(
const queue<VALUE2, CONTAINER2>&,
109 const queue<VALUE2, CONTAINER2>&);
111#if defined BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON \
112 && defined BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS
113 template <
class VALUE2, three_way_comparable CONTAINER2>
114 friend compare_three_way_result_t<CONTAINER2>
115 operator<=>(
const queue<VALUE2, CONTAINER2>&,
116 const queue<VALUE2, CONTAINER2>&);
123 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
129 template <
class INPUT_ITER,
class SENTINEL>
130 void privatePushRange(INPUT_ITER first, SENTINEL last);
134 typedef typename CONTAINER::value_type
value_type;
135 typedef typename CONTAINER::reference
reference;
137 typedef typename CONTAINER::size_type
size_type;
149 BloombergLP::bslma::UsesBslmaAllocator,
150 BloombergLP::bslma::UsesBslmaAllocator<container_type>::value);
165 queue(BloombergLP::bslmf::MovableRef<queue> container);
169 explicit queue(
const CONTAINER& container);
175 explicit queue(BloombergLP::bslmf::MovableRef<CONTAINER> container);
183 template <
class ALLOCATOR>
185 queue(
const ALLOCATOR& basicAllocator,
187 ALLOCATOR>::type * = 0);
196 template <
class ALLOCATOR>
197 queue(
const CONTAINER& container,
198 const ALLOCATOR& basicAllocator,
200 ALLOCATOR>::type * = 0);
209 template <
class ALLOCATOR>
211 const ALLOCATOR& basicAllocator,
213 ALLOCATOR>::type * = 0);
226 template <
class ALLOCATOR>
227 queue(BloombergLP::bslmf::MovableRef<CONTAINER> container,
228 const ALLOCATOR& basicAllocator,
230 ALLOCATOR>::type * = 0);
243 template <
class ALLOCATOR>
244 queue(BloombergLP::bslmf::MovableRef<queue> original,
245 const ALLOCATOR& basicAllocator,
247 ALLOCATOR>::type * = 0);
254 template <
class INPUT_ITER>
255 queue(INPUT_ITER first, INPUT_ITER last);
256 template <
class INPUT_ITER,
class ALLOCATOR>
257 queue(INPUT_ITER first,
259 const ALLOCATOR& allocator,
261 ALLOCATOR>::type * = 0);
270 template <
class t_RANGE>
273 template <
class t_RANGE,
class t_ALLOCATOR>
277 const t_ALLOCATOR& allocator,
279 t_ALLOCATOR>::type * = 0);
295#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
298#ifndef BSLSTL_QUEUE_VARIADIC_LIMIT
299#define BSLSTL_QUEUE_VARIADIC_LIMIT 10
301#ifndef BSLSTL_QUEUE_VARIADIC_LIMIT_A
302#define BSLSTL_QUEUE_VARIADIC_LIMIT_A BSLSTL_QUEUE_VARIADIC_LIMIT
304#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 0
308#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 1
309 template <
class Args_01>
313#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 2
314 template <
class Args_01,
320#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 3
321 template <
class Args_01,
329#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 4
330 template <
class Args_01,
340#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 5
341 template <
class Args_01,
353#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 6
354 template <
class Args_01,
368#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 7
369 template <
class Args_01,
385#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 8
386 template <
class Args_01,
404#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 9
405 template <
class Args_01,
425#if BSLSTL_QUEUE_VARIADIC_LIMIT_A >= 10
426 template <
class Args_01,
451 template <
class... Args>
464 void push(BloombergLP::bslmf::MovableRef<value_type> value);
471 template <
class t_RANGE>
483 bsl::is_nothrow_swappable<CONTAINER>::value);
512#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
519template<
class CONTAINER,
520 class = bsl::enable_if_t<!bsl::IsStdAllocator_v<CONTAINER>>
522queue(CONTAINER) -> queue<typename CONTAINER::value_type, CONTAINER>;
531 class = bsl::enable_if_t<bsl::uses_allocator_v<CONTAINER, ALLOCATOR>>
533queue(CONTAINER, ALLOCATOR) -> queue<typename CONTAINER::value_type, CONTAINER>;
537template <
class INPUT_ITER,
538 class TYPE = BloombergLP::bslstl::IteratorUtil::
539 IterVal_t<INPUT_ITER>>
540queue(INPUT_ITER, INPUT_ITER) -> queue<TYPE>;
546template <
class INPUT_ITER,
548 class TYPE = BloombergLP::bslstl::IteratorUtil::
549 IterVal_t<INPUT_ITER>,
550 class = enable_if_t<IsStdAllocator_v<ALLOCATOR>>>
551queue(INPUT_ITER, INPUT_ITER, ALLOCATOR)-> queue<TYPE, deque<TYPE, ALLOCATOR>>;
553#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
554 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
557template <ranges::input_range t_RANGE>
558queue(from_range_t, t_RANGE&&) -> queue<ranges::range_value_t<t_RANGE>>;
564template <ranges::input_range t_RANGE,
566 class t_TYPE = ranges::range_value_t<t_RANGE>>
567requires IsStdAllocator_v<t_ALLOCATOR>
568queue(from_range_t, t_RANGE&&, t_ALLOCATOR)
569-> queue<t_TYPE, deque<t_TYPE, t_ALLOCATOR>>;
582template <
class VALUE,
class CONTAINER>
584 const queue<VALUE, CONTAINER>&
rhs);
594template <
class VALUE,
class CONTAINER>
596 const queue<VALUE, CONTAINER>&
rhs);
609template <
class VALUE,
class CONTAINER>
610bool operator< (
const queue<VALUE, CONTAINER>&
lhs,
611 const queue<VALUE, CONTAINER>&
rhs);
621template <
class VALUE,
class CONTAINER>
622bool operator> (
const queue<VALUE, CONTAINER>&
lhs,
623 const queue<VALUE, CONTAINER>&
rhs);
633template <
class VALUE,
class CONTAINER>
635 const queue<VALUE, CONTAINER>&
rhs);
645template <
class VALUE,
class CONTAINER>
647 const queue<VALUE, CONTAINER>&
rhs);
653template <
class VALUE,
class CONTAINER>
654void swap(queue<VALUE, CONTAINER>&
lhs,
655 queue<VALUE, CONTAINER>&
rhs)
667template <
class VALUE,
class CONTAINER>
673template <
class VALUE,
class CONTAINER>
680template <
class VALUE,
class CONTAINER>
682queue<VALUE, CONTAINER>::queue(BloombergLP::bslmf::MovableRef<queue> original)
683: c(MoveUtil::move(MoveUtil::access(original).c))
687template <
class VALUE,
class CONTAINER>
689queue<VALUE, CONTAINER>::queue(
const CONTAINER& container)
694template <
class VALUE,
class CONTAINER>
695template <
class ALLOCATOR>
697queue<VALUE, CONTAINER>::queue(
698 const ALLOCATOR& basicAllocator,
705template <
class VALUE,
class CONTAINER>
706template <
class ALLOCATOR>
708queue<VALUE, CONTAINER>::queue(
709 const CONTAINER& container,
710 const ALLOCATOR& basicAllocator,
713: c(container, basicAllocator)
717template <
class VALUE,
class CONTAINER>
718template <
class ALLOCATOR>
720queue<VALUE, CONTAINER>::queue(
722 const ALLOCATOR& basicAllocator,
725: c(queue.c, basicAllocator)
729template <
class VALUE,
class CONTAINER>
731queue<VALUE, CONTAINER>::queue(BloombergLP::bslmf::MovableRef<CONTAINER>
733: c(MoveUtil::move(container))
737template <
class VALUE,
class CONTAINER>
738template <
class ALLOCATOR>
740queue<VALUE, CONTAINER>::queue(
741 BloombergLP::bslmf::MovableRef<CONTAINER> container,
742 const ALLOCATOR& basicAllocator,
745: c(MoveUtil::move(container), basicAllocator)
749template <
class VALUE,
class CONTAINER>
750template <
class ALLOCATOR>
752queue<VALUE, CONTAINER>::queue(
753 BloombergLP::bslmf::MovableRef<queue> original,
754 const ALLOCATOR& basicAllocator,
757: c(MoveUtil::move(MoveUtil::access(original).c), basicAllocator)
761template <
class VALUE,
class CONTAINER>
762template <
class INPUT_ITER>
764queue<VALUE, CONTAINER>::queue(INPUT_ITER first, INPUT_ITER last)
769template <
class VALUE,
class CONTAINER>
770template <
class INPUT_ITER,
class ALLOCATOR>
772queue<VALUE, CONTAINER>::queue(
775 const ALLOCATOR& allocator,
778: c(first, last, allocator)
782template <
class VALUE,
class CONTAINER>
783template <
class t_RANGE>
786queue<VALUE, CONTAINER>::queue(
789#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_TO_CONTAINER
790: c(ranges::to<CONTAINER>(std::forward<t_RANGE>(range)))
797template <
class VALUE,
class CONTAINER>
798template <
class t_RANGE,
class t_ALLOCATOR>
801queue<VALUE, CONTAINER>::queue(
804 const t_ALLOCATOR& allocator,
807 t_ALLOCATOR>::type *)
808#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_TO_CONTAINER
809: c(ranges::to<CONTAINER>(std::forward<t_RANGE>(range), allocator))
817template <
class VALUE,
class CONTAINER>
818template <
class INPUT_ITER,
class SENTINEL>
820void queue<VALUE, CONTAINER>::privatePushRange(INPUT_ITER first,
823 while (first != last) {
830template <
class VALUE,
class CONTAINER>
832queue<VALUE, CONTAINER>& queue<VALUE, CONTAINER>::operator=(
const queue& rhs)
838template <
class VALUE,
class CONTAINER>
840queue<VALUE, CONTAINER>& queue<VALUE, CONTAINER>::operator=(
841 BloombergLP::bslmf::MovableRef<queue> rhs)
843 c = MoveUtil::move(MoveUtil::access(rhs).c);
847#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
850#ifndef BSLSTL_QUEUE_VARIADIC_LIMIT
851#define BSLSTL_QUEUE_VARIADIC_LIMIT 10
853#ifndef BSLSTL_QUEUE_VARIADIC_LIMIT_B
854#define BSLSTL_QUEUE_VARIADIC_LIMIT_B BSLSTL_QUEUE_VARIADIC_LIMIT
856#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 0
857template <
class VALUE,
class CONTAINER>
859typename queue<VALUE, CONTAINER>::reference
860queue<VALUE, CONTAINER>::emplace(
868#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 1
869template <
class VALUE,
class CONTAINER>
870template <
class Args_01>
872typename queue<VALUE, CONTAINER>::reference
873queue<VALUE, CONTAINER>::emplace(
881#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 2
882template <
class VALUE,
class CONTAINER>
883template <
class Args_01,
886typename queue<VALUE, CONTAINER>::reference
887queue<VALUE, CONTAINER>::emplace(
897#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 3
898template <
class VALUE,
class CONTAINER>
899template <
class Args_01,
903typename queue<VALUE, CONTAINER>::reference
904queue<VALUE, CONTAINER>::emplace(
916#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 4
917template <
class VALUE,
class CONTAINER>
918template <
class Args_01,
923typename queue<VALUE, CONTAINER>::reference
924queue<VALUE, CONTAINER>::emplace(
938#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 5
939template <
class VALUE,
class CONTAINER>
940template <
class Args_01,
946typename queue<VALUE, CONTAINER>::reference
947queue<VALUE, CONTAINER>::emplace(
963#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 6
964template <
class VALUE,
class CONTAINER>
965template <
class Args_01,
972typename queue<VALUE, CONTAINER>::reference
973queue<VALUE, CONTAINER>::emplace(
991#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 7
992template <
class VALUE,
class CONTAINER>
993template <
class Args_01,
1001typename queue<VALUE, CONTAINER>::reference
1002queue<VALUE, CONTAINER>::emplace(
1022#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 8
1023template <
class VALUE,
class CONTAINER>
1024template <
class Args_01,
1033typename queue<VALUE, CONTAINER>::reference
1034queue<VALUE, CONTAINER>::emplace(
1056#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 9
1057template <
class VALUE,
class CONTAINER>
1058template <
class Args_01,
1068typename queue<VALUE, CONTAINER>::reference
1069queue<VALUE, CONTAINER>::emplace(
1093#if BSLSTL_QUEUE_VARIADIC_LIMIT_B >= 10
1094template <
class VALUE,
class CONTAINER>
1095template <
class Args_01,
1106typename queue<VALUE, CONTAINER>::reference
1107queue<VALUE, CONTAINER>::emplace(
1136template <
class VALUE,
class CONTAINER>
1137template <
class... Args>
1139typename queue<VALUE, CONTAINER>::reference
1140queue<VALUE, CONTAINER>::emplace(
1149template <
class VALUE,
class CONTAINER>
1151void queue<VALUE, CONTAINER>::push(
const value_type& value)
1156template <
class VALUE,
class CONTAINER>
1158void queue<VALUE, CONTAINER>::push(BloombergLP::bslmf::MovableRef<value_type>
1161 c.push_back(MoveUtil::move(value));
1164template <
class VALUE,
class CONTAINER>
1165template <
class t_RANGE>
1167void queue<VALUE, CONTAINER>::push_range(
1170#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1171 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1172 if constexpr (
requires{ c.append_range(std::forward<t_RANGE>(range)); }) {
1173 c.append_range(std::forward<t_RANGE>(range));
1176 ranges::copy(range, back_inserter(c));
1183template <
class VALUE,
class CONTAINER>
1185void queue<VALUE, CONTAINER>::pop()
1190template <
class VALUE,
class CONTAINER>
1192void queue<VALUE, CONTAINER>::swap(queue& other)
1194 bsl::is_nothrow_swappable<CONTAINER>::value)
1196 BloombergLP::bslalg::SwapUtil::swap(&c, &other.c);
1200template <
class VALUE,
class CONTAINER>
1202bool queue<VALUE, CONTAINER>::empty()
const
1207template <
class VALUE,
class CONTAINER>
1209typename queue<VALUE, CONTAINER>::size_type
1210queue<VALUE, CONTAINER>::size()
const
1215template <
class VALUE,
class CONTAINER>
1217typename queue<VALUE, CONTAINER>::reference
1218queue<VALUE, CONTAINER>::front()
1223template <
class VALUE,
class CONTAINER>
1225typename queue<VALUE, CONTAINER>::const_reference
1226queue<VALUE, CONTAINER>::front()
const
1231template <
class VALUE,
class CONTAINER>
1233typename queue<VALUE, CONTAINER>::reference
1234queue<VALUE, CONTAINER>::back()
1239template <
class VALUE,
class CONTAINER>
1241typename queue<VALUE, CONTAINER>::const_reference
1242queue<VALUE, CONTAINER>::back()
const
1248template <
class VALUE,
class CONTAINER>
1250bool operator==(
const queue<VALUE, CONTAINER>& lhs,
1251 const queue<VALUE, CONTAINER>& rhs)
1256template <
class VALUE,
class CONTAINER>
1258bool operator!=(
const queue<VALUE, CONTAINER>& lhs,
1259 const queue<VALUE, CONTAINER>& rhs)
1264template <
class VALUE,
class CONTAINER>
1266bool operator< (
const queue<VALUE, CONTAINER>& lhs,
1267 const queue<VALUE, CONTAINER>& rhs)
1272template <
class VALUE,
class CONTAINER>
1274bool operator> (
const queue<VALUE, CONTAINER>& lhs,
1275 const queue<VALUE, CONTAINER>& rhs)
1280template <
class VALUE,
class CONTAINER>
1282bool operator<=(
const queue<VALUE, CONTAINER>& lhs,
1283 const queue<VALUE, CONTAINER>& rhs)
1288template <
class VALUE,
class CONTAINER>
1290bool operator>=(
const queue<VALUE, CONTAINER>& lhs,
1291 const queue<VALUE, CONTAINER>& rhs)
1296#if defined BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON \
1297 && defined BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS
1298template <
class VALUE, three_way_comparable CONTAINER>
1299inline compare_three_way_result_t<CONTAINER>
1300operator<=>(
const queue<VALUE, CONTAINER>& lhs,
1301 const queue<VALUE, CONTAINER>& rhs)
1308template <
class VALUE,
class CONTAINER>
1310void swap(queue<VALUE, CONTAINER>& lhs,
1311 queue<VALUE, CONTAINER>& rhs)
1320# error Not valid except when included from bslstl_queue.h
#define BSLMF_NESTED_TRAIT_DECLARATION_IF(t_TYPE, t_TRAIT, t_COND)
Definition bslmf_nestedtraitdeclaration.h:243
friend bool operator==(const queue< VALUE2, CONTAINER2 > &, const queue< VALUE2, CONTAINER2 > &)
void pop()
Definition bslstl_queue.h:989
CONTAINER::const_reference const_reference
Definition bslstl_queue.h:381
size_type size() const
Definition bslstl_queue.h:1014
friend bool operator<=(const queue< VALUE2, CONTAINER2 > &, const queue< VALUE2, CONTAINER2 > &)
queue()
Definition bslstl_queue.h:763
bool empty() const
Definition bslstl_queue.h:1006
friend bool operator>=(const queue< VALUE2, CONTAINER2 > &, const queue< VALUE2, CONTAINER2 > &)
friend bool operator!=(const queue< VALUE2, CONTAINER2 > &, const queue< VALUE2, CONTAINER2 > &)
CONTAINER::value_type value_type
Definition bslstl_queue.h:379
void push_range(BSLS_COMPILERFEATURES_FORWARD_REF(t_RANGE) range)
Definition bslstl_queue.h:971
void push(const value_type &value)
Definition bslstl_queue.h:955
CONTAINER::size_type size_type
Definition bslstl_queue.h:382
queue & operator=(const queue &rhs)
Definition bslstl_queue.h:926
void swap(queue &other) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(bsl reference front()
Definition bslstl_queue.h:581
reference back()
Definition bslstl_queue.h:1038
CONTAINER container_type
Definition bslstl_queue.h:383
CONTAINER::reference reference
Definition bslstl_queue.h:380
friend bool operator<(const queue< VALUE2, CONTAINER2 > &, const queue< VALUE2, CONTAINER2 > &)
friend bool operator>(const queue< VALUE2, CONTAINER2 > &, const queue< VALUE2, CONTAINER2 > &)
reference emplace(Args &&... args)
Definition bslstl_queue.h:946
CONTAINER c
Definition bslstl_queue.h:387
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
static const t_TYPE value
Definition bslmf_integralconstant.h:267
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(...)
Definition bsls_keyword.h:676
#define BSLSTL_QUEUE_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T)
Definition bslstl_queue.h:294
bool operator!=(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
bool operator==(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
void swap(OptionValue &a, OptionValue &b)
bool operator>=(const Guid &lhs, const Guid &rhs)
bool operator<=(const Guid &lhs, const Guid &rhs)
Definition bdlat_valuetypefunctions.h:939
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
const from_range_t from_range
ALLOCATOR & lhs
Definition bslstl_string.h:3917
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
Definition bslmf_usesallocator.h:165