11#ifndef INCLUDED_BSLALG_DEQUEPRIMITIVES_CPP03
12#define INCLUDED_BSLALG_DEQUEPRIMITIVES_CPP03
63#ifdef COMPILING_BSLALG_DEQUEPRIMITIVES_H
80 BITWISE_MOVEABLE_TRAITS = 1,
81 BITWISE_COPYABLE_TRAITS = 2,
89template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
90class DequePrimitives_DequeElementGuard;
92template <
class VALUE_TYPE,
int BLOCK_LENGTH>
93class DequePrimitives_DequeMoveGuard;
95template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
96class DequePrimitives_ExternalDequeElementGuard;
98template <
class VALUE_TYPE,
int BLOCK_LENGTH>
99class DequePrimitives_DequeEndpointProctor;
111template <
class VALUE_TYPE,
int BLOCK_LENGTH>
112struct DequePrimitives {
116 typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH>
Iterator;
120 typedef DequeImpUtil<VALUE_TYPE, BLOCK_LENGTH> ImpUtil;
121 typedef DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH> MoveGuard;
133 template <
class ALLOCATOR>
142 template <
class ALLOCATOR>
148 template <
class ALLOCATOR>
164 template <
class ALLOCATOR>
171 ALLOCATOR allocator);
183 template <
class ALLOCATOR>
193 template <
class ALLOCATOR>
213 template <
class ALLOCATOR>
218 const VALUE_TYPE& value,
219 ALLOCATOR allocator);
231 template <
class ALLOCATOR>
237 const VALUE_TYPE& value,
240 template <
class ALLOCATOR>
246 const VALUE_TYPE& value,
249 template <
class ALLOCATOR>
255 const VALUE_TYPE& value,
268 template <
class FWD_ITER,
class ALLOCATOR>
275 ALLOCATOR allocator);
285 template <
class ALLOCATOR>
291 ALLOCATOR allocator);
302 template <
class ALLOCATOR>
310 template <
class ALLOCATOR>
318 template <
class ALLOCATOR>
336 template <
class ALLOCATOR>
341 const VALUE_TYPE& value,
342 ALLOCATOR allocator);
354 template <
class ALLOCATOR>
360 const VALUE_TYPE& value,
363 template <
class ALLOCATOR>
369 const VALUE_TYPE& value,
372 template <
class ALLOCATOR>
378 const VALUE_TYPE& value,
391 template <
class FWD_ITER,
class ALLOCATOR>
398 ALLOCATOR allocator);
409 template <
class ALLOCATOR>
415 ALLOCATOR allocator);
427 template <
class ALLOCATOR>
435 template <
class ALLOCATOR>
443 template <
class ALLOCATOR>
452#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
455#ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT
456#define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT 10
458#ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A
459#define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT
461#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
462 template <
class ALLOCATOR>
466 ALLOCATOR allocator);
469#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
470 template <
class ALLOCATOR,
class Args_01>
478#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
479 template <
class ALLOCATOR,
class Args_01,
489#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
490 template <
class ALLOCATOR,
class Args_01,
502#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
503 template <
class ALLOCATOR,
class Args_01,
517#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
518 template <
class ALLOCATOR,
class Args_01,
534#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
535 template <
class ALLOCATOR,
class Args_01,
553#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
554 template <
class ALLOCATOR,
class Args_01,
574#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
575 template <
class ALLOCATOR,
class Args_01,
597#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
598 template <
class ALLOCATOR,
class Args_01,
622#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
623 template <
class ALLOCATOR,
class Args_01,
650#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
651 template <
class ALLOCATOR>
660#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
661 template <
class ALLOCATOR,
class Args_01>
671#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
672 template <
class ALLOCATOR,
class Args_01,
684#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
685 template <
class ALLOCATOR,
class Args_01,
699#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
700 template <
class ALLOCATOR,
class Args_01,
716#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
717 template <
class ALLOCATOR,
class Args_01,
735#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
736 template <
class ALLOCATOR,
class Args_01,
756#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
757 template <
class ALLOCATOR,
class Args_01,
779#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
780 template <
class ALLOCATOR,
class Args_01,
804#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
805 template <
class ALLOCATOR,
class Args_01,
831#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
832 template <
class ALLOCATOR,
class Args_01,
860#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
861 template <
class ALLOCATOR>
870#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
871 template <
class ALLOCATOR,
class Args_01>
881#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
882 template <
class ALLOCATOR,
class Args_01,
894#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
895 template <
class ALLOCATOR,
class Args_01,
909#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
910 template <
class ALLOCATOR,
class Args_01,
926#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
927 template <
class ALLOCATOR,
class Args_01,
945#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
946 template <
class ALLOCATOR,
class Args_01,
966#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
967 template <
class ALLOCATOR,
class Args_01,
989#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
990 template <
class ALLOCATOR,
class Args_01,
1002 ALLOCATOR allocator,
1014#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
1015 template <
class ALLOCATOR,
class Args_01,
1028 ALLOCATOR allocator,
1041#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
1042 template <
class ALLOCATOR,
class Args_01,
1056 ALLOCATOR allocator,
1070#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
1071 template <
class ALLOCATOR>
1076 ALLOCATOR allocator,
1080#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
1081 template <
class ALLOCATOR,
class Args_01>
1086 ALLOCATOR allocator,
1091#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
1092 template <
class ALLOCATOR,
class Args_01,
1098 ALLOCATOR allocator,
1104#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
1105 template <
class ALLOCATOR,
class Args_01,
1112 ALLOCATOR allocator,
1119#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
1120 template <
class ALLOCATOR,
class Args_01,
1128 ALLOCATOR allocator,
1136#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
1137 template <
class ALLOCATOR,
class Args_01,
1146 ALLOCATOR allocator,
1155#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
1156 template <
class ALLOCATOR,
class Args_01,
1166 ALLOCATOR allocator,
1176#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
1177 template <
class ALLOCATOR,
class Args_01,
1188 ALLOCATOR allocator,
1199#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
1200 template <
class ALLOCATOR,
class Args_01,
1212 ALLOCATOR allocator,
1224#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
1225 template <
class ALLOCATOR,
class Args_01,
1238 ALLOCATOR allocator,
1251#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
1252 template <
class ALLOCATOR,
class Args_01,
1266 ALLOCATOR allocator,
1281#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
1282 template <
class ALLOCATOR>
1286 ALLOCATOR allocator);
1289#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
1290 template <
class ALLOCATOR,
class Args_01>
1294 ALLOCATOR allocator,
1298#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
1299 template <
class ALLOCATOR,
class Args_01,
1304 ALLOCATOR allocator,
1309#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
1310 template <
class ALLOCATOR,
class Args_01,
1316 ALLOCATOR allocator,
1322#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
1323 template <
class ALLOCATOR,
class Args_01,
1330 ALLOCATOR allocator,
1337#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
1338 template <
class ALLOCATOR,
class Args_01,
1346 ALLOCATOR allocator,
1354#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
1355 template <
class ALLOCATOR,
class Args_01,
1364 ALLOCATOR allocator,
1373#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
1374 template <
class ALLOCATOR,
class Args_01,
1384 ALLOCATOR allocator,
1394#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
1395 template <
class ALLOCATOR,
class Args_01,
1406 ALLOCATOR allocator,
1417#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
1418 template <
class ALLOCATOR,
class Args_01,
1430 ALLOCATOR allocator,
1442#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
1443 template <
class ALLOCATOR,
class Args_01,
1456 ALLOCATOR allocator,
1470#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
1471 template <
class ALLOCATOR>
1476 ALLOCATOR allocator,
1480#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
1481 template <
class ALLOCATOR,
class Args_01>
1486 ALLOCATOR allocator,
1491#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
1492 template <
class ALLOCATOR,
class Args_01,
1498 ALLOCATOR allocator,
1504#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
1505 template <
class ALLOCATOR,
class Args_01,
1512 ALLOCATOR allocator,
1519#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
1520 template <
class ALLOCATOR,
class Args_01,
1528 ALLOCATOR allocator,
1536#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
1537 template <
class ALLOCATOR,
class Args_01,
1546 ALLOCATOR allocator,
1555#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
1556 template <
class ALLOCATOR,
class Args_01,
1566 ALLOCATOR allocator,
1576#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
1577 template <
class ALLOCATOR,
class Args_01,
1588 ALLOCATOR allocator,
1599#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
1600 template <
class ALLOCATOR,
class Args_01,
1612 ALLOCATOR allocator,
1624#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
1625 template <
class ALLOCATOR,
class Args_01,
1638 ALLOCATOR allocator,
1651#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
1652 template <
class ALLOCATOR,
class Args_01,
1666 ALLOCATOR allocator,
1680#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
1681 template <
class ALLOCATOR>
1686 ALLOCATOR allocator,
1690#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
1691 template <
class ALLOCATOR,
class Args_01>
1696 ALLOCATOR allocator,
1701#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
1702 template <
class ALLOCATOR,
class Args_01,
1708 ALLOCATOR allocator,
1714#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
1715 template <
class ALLOCATOR,
class Args_01,
1722 ALLOCATOR allocator,
1729#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
1730 template <
class ALLOCATOR,
class Args_01,
1738 ALLOCATOR allocator,
1746#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
1747 template <
class ALLOCATOR,
class Args_01,
1756 ALLOCATOR allocator,
1765#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
1766 template <
class ALLOCATOR,
class Args_01,
1776 ALLOCATOR allocator,
1786#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
1787 template <
class ALLOCATOR,
class Args_01,
1798 ALLOCATOR allocator,
1809#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
1810 template <
class ALLOCATOR,
class Args_01,
1822 ALLOCATOR allocator,
1834#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
1835 template <
class ALLOCATOR,
class Args_01,
1848 ALLOCATOR allocator,
1861#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
1862 template <
class ALLOCATOR,
class Args_01,
1876 ALLOCATOR allocator,
1890#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0
1891 template <
class ALLOCATOR>
1896 ALLOCATOR allocator,
1900#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1
1901 template <
class ALLOCATOR,
class Args_01>
1906 ALLOCATOR allocator,
1911#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2
1912 template <
class ALLOCATOR,
class Args_01,
1918 ALLOCATOR allocator,
1924#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3
1925 template <
class ALLOCATOR,
class Args_01,
1932 ALLOCATOR allocator,
1939#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4
1940 template <
class ALLOCATOR,
class Args_01,
1948 ALLOCATOR allocator,
1956#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5
1957 template <
class ALLOCATOR,
class Args_01,
1966 ALLOCATOR allocator,
1975#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6
1976 template <
class ALLOCATOR,
class Args_01,
1986 ALLOCATOR allocator,
1996#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7
1997 template <
class ALLOCATOR,
class Args_01,
2008 ALLOCATOR allocator,
2019#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8
2020 template <
class ALLOCATOR,
class Args_01,
2032 ALLOCATOR allocator,
2044#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9
2045 template <
class ALLOCATOR,
class Args_01,
2058 ALLOCATOR allocator,
2071#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10
2072 template <
class ALLOCATOR,
class Args_01,
2086 ALLOCATOR allocator,
2103 template <
class ALLOCATOR,
class... Args>
2107 ALLOCATOR allocator,
2110 template <
class ALLOCATOR,
class... Args>
2115 ALLOCATOR allocator,
2118 template <
class ALLOCATOR,
class... Args>
2123 ALLOCATOR allocator,
2126 template <
class ALLOCATOR,
class... Args>
2131 ALLOCATOR allocator,
2135 template <
class ALLOCATOR,
class... Args>
2139 ALLOCATOR allocator,
2142 template <
class ALLOCATOR,
class... Args>
2147 ALLOCATOR allocator,
2150 template <
class ALLOCATOR,
class... Args>
2155 ALLOCATOR allocator,
2158 template <
class ALLOCATOR,
class... Args>
2163 ALLOCATOR allocator,
2195 template <
class ALLOCATOR>
2199 const VALUE_TYPE& value,
2200 ALLOCATOR allocator);
2210 template <
class ALLOCATOR>
2214 const VALUE_TYPE& value,
2215 ALLOCATOR allocator);
2225 template <
class ALLOCATOR>
2229 ALLOCATOR allocator);
2236template <
class VALUE_TYPE>
2237struct DequePrimitives<VALUE_TYPE, 1> {
2241 typedef DequeImpUtil<VALUE_TYPE, 1> ImpUtil;
2242 typedef DequeIterator<VALUE_TYPE, 1>
Iterator;
2245 template <
class ALLOCATOR>
2248 template <
class ALLOCATOR>
2255 ALLOCATOR allocator);
2257 template <
class ALLOCATOR>
2262 const VALUE_TYPE& value,
2263 ALLOCATOR allocator);
2265 template <
class FWD_ITER,
class ALLOCATOR>
2272 ALLOCATOR allocator);
2274 template <
class ALLOCATOR>
2279 const VALUE_TYPE& value,
2280 ALLOCATOR allocator);
2282 template <
class FWD_ITER,
class ALLOCATOR>
2289 ALLOCATOR allocator);
2291 template <
class ALLOCATOR>
2295 const VALUE_TYPE& value,
2296 ALLOCATOR allocator);
2297 template <
class ALLOCATOR>
2302 const VALUE_TYPE& value,
2303 ALLOCATOR allocator,
2305 template <
class ALLOCATOR>
2310 const VALUE_TYPE& value,
2311 ALLOCATOR allocator,
2314 template <
class ALLOCATOR>
2318 const VALUE_TYPE& value,
2319 ALLOCATOR allocator);
2320 template <
class ALLOCATOR>
2325 const VALUE_TYPE& value,
2326 ALLOCATOR allocator,
2328 template <
class ALLOCATOR>
2333 const VALUE_TYPE& value,
2334 ALLOCATOR allocator,
2337 template <
class ALLOCATOR>
2341 ALLOCATOR allocator);
2343 template <
class ALLOCATOR>
2348 ALLOCATOR allocator,
2351 template <
class ALLOCATOR>
2356 ALLOCATOR allocator,
2371template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
2372class DequePrimitives_DequeElementGuard {
2376 typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH>
Iterator;
2382 ALLOCATOR d_allocator;
2386 DequePrimitives_DequeElementGuard(
2387 const DequePrimitives_DequeElementGuard&);
2388 DequePrimitives_DequeElementGuard& operator=(
2389 const DequePrimitives_DequeElementGuard&);
2399 DequePrimitives_DequeElementGuard(
const Iterator& begin,
2401 ALLOCATOR allocator);
2436template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
2437class DequePrimitives_ExternalDequeElementGuard {
2441 typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH>
Iterator;
2450 ALLOCATOR d_allocator;
2454 DequePrimitives_ExternalDequeElementGuard(
2455 const DequePrimitives_ExternalDequeElementGuard&);
2456 DequePrimitives_ExternalDequeElementGuard& operator=(
2457 const DequePrimitives_ExternalDequeElementGuard&);
2467 DequePrimitives_ExternalDequeElementGuard(
Iterator *begin,
2469 ALLOCATOR allocator);
2493template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2494class DequePrimitives_DequeMoveGuard {
2498 typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH>
Iterator;
2510 DequePrimitives_DequeMoveGuard(
const DequePrimitives_DequeMoveGuard&);
2511 DequePrimitives_DequeMoveGuard& operator=(
2512 const DequePrimitives_DequeMoveGuard&);
2521 DequePrimitives_DequeMoveGuard(
Iterator dest,
2547template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2548class DequePrimitives_DequeEndpointProctor {
2552 typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH>
Iterator;
2561 DequePrimitives_DequeEndpointProctor(
2562 const DequePrimitives_DequeEndpointProctor&);
2563 DequePrimitives_DequeEndpointProctor& operator=(
2564 const DequePrimitives_DequeEndpointProctor&);
2573 DequePrimitives_DequeEndpointProctor(
Iterator *endpoint,
2598template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2599template <
class ALLOCATOR>
2603 ALLOCATOR allocator)
2608 VALUE = IS_BITWISECOPYABLE
2609 ? BITWISE_COPYABLE_TRAITS
2613 return destruct(begin,
2619template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2620template <
class ALLOCATOR>
2630template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2631template <
class ALLOCATOR>
2635 ALLOCATOR allocator,
2644template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2645template <
class ALLOCATOR>
2655 ALLOCATOR allocator)
2660 VALUE = IS_BITWISECOPYABLE
2661 ? BITWISE_COPYABLE_TRAITS
2665 return erase(toBegin,
2675template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2676template <
class ALLOCATOR>
2686 ALLOCATOR allocator,
2689 if (first == last) {
2690 *toBegin = fromBegin;
2695 size_type frontSize = first - fromBegin;
2696 size_type backSize = fromEnd - last;
2699 if (frontSize < backSize) {
2701 for (; 0 < frontSize; --frontSize) {
2704 *last = MoveUtil::move(*first);
2711 for (; 0 < backSize; --backSize, ++first, ++last) {
2712 *first = MoveUtil::move(*last);
2714 *toBegin = fromBegin;
2717 destruct(first, last, allocator);
2721template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2722template <
class ALLOCATOR>
2735 size_type frontSize = first - fromBegin;
2736 size_type backSize = fromEnd - last;
2739 if (frontSize < backSize) {
2741 moveBack(&last, &first, frontSize);
2747 moveFront(&first, &last, backSize);
2748 *toBegin = fromBegin;
2755template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2756template <
class ALLOCATOR>
2759DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
2760 ::insertAndMoveToBack(Iterator *toEnd,
2763 size_type numElements,
2764 const VALUE_TYPE& value,
2765 ALLOCATOR allocator)
2771 VALUE = IS_BITWISECOPYABLE
2772 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
2773 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
2776 insertAndMoveToBack(toEnd,
2785template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2786template <
class ALLOCATOR>
2792 size_type numElements,
2793 const VALUE_TYPE& value,
2794 ALLOCATOR allocator,
2797 size_type backSize = fromEnd - position;
2798 Iterator
end = fromEnd;
2799 Iterator dest =
end + numElements;
2817 moveBack(&dest, &end, backSize);
2818 uninitializedFillNFront(&dest, dest, numElements, space.
object(),
2821 *toEnd = fromEnd + numElements;
2824template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2825template <
class ALLOCATOR>
2831 size_type numElements,
2832 const VALUE_TYPE& value,
2833 ALLOCATOR allocator,
2836 typedef DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE,
2838 ALLOCATOR> ExtGuard;
2841 size_type backSize = fromEnd - position;
2842 Iterator
end = fromEnd;
2843 Iterator dest =
end + numElements;
2862 MoveGuard guard(end, dest, backSize,
false);
2864 moveBack(&dest, &end, backSize);
2869 Iterator dest2(dest);
2870 ExtGuard eguard(&dest, &dest2, allocator);
2872 uninitializedFillNFront(&dest, dest, numElements, space.
object(),
2876 *toEnd = fromEnd + numElements;
2879template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2880template <
class ALLOCATOR>
2886 size_type numElements,
2887 const VALUE_TYPE& value,
2888 ALLOCATOR allocator,
2891 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
2893 ALLOCATOR> ElementGuard;
2895 size_type backSize = fromEnd - position;
2896 Iterator
end = fromEnd;
2897 Iterator dest =
end + numElements;
2915 ElementGuard guard(dest, dest, allocator);
2916 if (backSize >= numElements) {
2917 for (numDest = numElements; 0 < numDest; --numDest) {
2923 guard.moveBegin(-1);
2925 for (backSize -= numElements; 0 < backSize; --backSize) {
2930 for (numDest = numElements; 0 < numDest; --numDest, ++position) {
2931 *position = space.
object();
2934 for (numDest = backSize; 0 < numDest; --numDest) {
2940 guard.moveBegin(-1);
2942 for (numDest = numElements; backSize < numDest; --numDest) {
2948 guard.moveBegin(-1);
2950 for (; 0 < numDest; --numDest, ++position) {
2951 *position = space.
object();
2956 *toEnd = fromEnd + numElements;
2959template <
class VALUE_TYPE,
int BLOCK_LENGTH>
2960template <
class FWD_ITER,
class ALLOCATOR>
2962DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
2963 ::insertAndMoveToBack(Iterator *toEnd,
2968 size_type numElements,
2969 ALLOCATOR allocator)
2971 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
2973 ALLOCATOR> ElementGuard;
2975 size_type backSize = fromEnd - position;
2976 Iterator
end = fromEnd;
2977 Iterator dest =
end + numElements;
2980 ElementGuard guard(dest, dest, allocator);
2981 if (backSize >= numElements) {
2982 for (numDest = numElements; 0 < numDest; --numDest) {
2988 guard.moveBegin(-1);
2990 for (numDest = backSize; numElements < numDest; --numDest) {
2995 for (; 0 < numDest; ++first, ++position, --numDest) {
2999 for (numDest = backSize; 0 < numDest; --numDest) {
3005 guard.moveBegin(-1);
3007 for (numDest = backSize; 0 < numDest; --numDest, ++position, ++first) {
3011 ElementGuard guard2(position, position, allocator);
3012 for (numDest = numElements; backSize < numDest; ++first, ++position,
3015 position.valuePtr(),
3022 *toEnd = fromEnd + numElements;
3025template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3026template <
class ALLOCATOR>
3034 ALLOCATOR allocator)
3040 VALUE = IS_BITWISECOPYABLE
3041 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3042 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3045 VALUE_TYPE& lvalue = value;
3047 moveInsertAndMoveToBack(toEnd,
3050 MoveUtil::move(lvalue),
3055template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3056template <
class ALLOCATOR>
3063 ALLOCATOR allocator,
3066 const size_type backSize = fromEnd - position;
3067 Iterator
end = fromEnd;
3068 Iterator dest =
end + 1;
3073 moveBack(&dest, &end, backSize);
3076 VALUE_TYPE& lvalue = value;
3079 MoveUtil::move(lvalue));
3081 *toEnd = fromEnd + 1;
3084template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3085template <
class ALLOCATOR>
3092 ALLOCATOR allocator,
3095 const size_type backSize = fromEnd - position;
3096 Iterator
end = fromEnd;
3097 Iterator dest =
end + 1;
3102 MoveGuard guard(end, dest, backSize,
false);
3104 moveBack(&dest, &end, backSize);
3107 VALUE_TYPE& lvalue = value;
3110 MoveUtil::move(lvalue));
3114 *toEnd = fromEnd + 1;
3117template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3118template <
class ALLOCATOR>
3125 ALLOCATOR allocator,
3128 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
3130 ALLOCATOR> ElementGuard;
3132 size_type backSize = fromEnd - position;
3133 Iterator
end = fromEnd;
3134 Iterator dest =
end + 1;
3138 ElementGuard guard(dest, dest, allocator);
3147 MoveUtil::move_if_noexcept(*end));
3148 guard.moveBegin(-1);
3152 for (backSize -= 1; 0 < backSize; --backSize) {
3155 *dest = MoveUtil::move_if_noexcept(*end);
3160 VALUE_TYPE& lvalue = value;
3161 *position = MoveUtil::move(lvalue);
3165 *toEnd = fromEnd + 1;
3168template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3169template <
class ALLOCATOR>
3172DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
3173 ::insertAndMoveToFront(Iterator *toBegin,
3176 size_type numElements,
3177 const VALUE_TYPE& value,
3178 ALLOCATOR allocator)
3184 VALUE = IS_BITWISECOPYABLE
3185 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3186 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3189 insertAndMoveToFront(toBegin,
3198template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3199template <
class ALLOCATOR>
3205 size_type numElements,
3206 const VALUE_TYPE& value,
3207 ALLOCATOR allocator,
3210 size_type frontSize = position - fromBegin;
3211 Iterator
begin = fromBegin;
3212 Iterator dest =
begin - numElements;
3230 moveFront(&dest, &begin, frontSize);
3231 uninitializedFillNBack(&dest, dest, numElements, space.
object(),
3234 *toBegin = fromBegin - numElements;
3237template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3238template <
class ALLOCATOR>
3244 size_type numElements,
3245 const VALUE_TYPE& value,
3246 ALLOCATOR allocator,
3249 typedef DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE,
3251 ALLOCATOR> ExtGuard;
3252 size_type frontSize = position - fromBegin;
3253 Iterator
begin = fromBegin;
3254 Iterator dest =
begin - numElements;
3272 MoveGuard guard(begin, dest, frontSize,
true);
3274 moveFront(&dest, &begin, frontSize);
3279 Iterator dest2(dest);
3280 ExtGuard eguard(&dest2, &dest, allocator);
3282 uninitializedFillNBack(&dest, dest, numElements, space.
object(),
3287 *toBegin = fromBegin - numElements;
3290template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3291template <
class ALLOCATOR>
3297 size_type numElements,
3298 const VALUE_TYPE& value,
3299 ALLOCATOR allocator,
3302 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
3304 ALLOCATOR> ElementGuard;
3306 size_type frontSize = position - fromBegin;
3307 Iterator
begin = fromBegin;
3308 Iterator dest =
begin - numElements;
3325 ElementGuard guard(dest, dest, allocator);
3326 if (frontSize >= numElements) {
3327 for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++
begin) {
3333 for (frontSize -= numElements; 0 < frontSize;
3334 --frontSize, ++dest, ++
begin) {
3337 for (numDest = numElements; 0 < numDest; --numDest, ++dest) {
3341 for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++
begin) {
3347 for (numDest = numElements; frontSize < numDest; --numDest, ++dest) {
3353 for (; 0 < numDest; --numDest, ++dest) {
3358 *toBegin = fromBegin - numElements;
3361template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3362template <
class FWD_ITER,
class ALLOCATOR>
3364DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
3365 ::insertAndMoveToFront(Iterator *toBegin,
3370 size_type numElements,
3371 ALLOCATOR allocator)
3373 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
3375 ALLOCATOR> ElementGuard;
3377 size_type frontSize = position - fromBegin;
3378 Iterator
begin = fromBegin;
3379 Iterator dest =
begin - numElements;
3382 ElementGuard guard(dest, dest, allocator);
3383 if (frontSize >= numElements) {
3384 for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++
begin) {
3390 for (frontSize -= numElements; 0 < frontSize;
3391 --frontSize, ++dest, ++
begin) {
3394 for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++first) {
3398 for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++
begin) {
3404 for (numDest = numElements; frontSize < numDest;
3405 --numDest, ++dest, ++first) {
3411 for (; 0 < numDest; --numDest, ++dest, ++first) {
3416 *toBegin = fromBegin - numElements;
3419template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3420template <
class ALLOCATOR>
3428 ALLOCATOR allocator)
3434 VALUE = IS_BITWISECOPYABLE
3435 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3436 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3439 VALUE_TYPE& lvalue = value;
3441 moveInsertAndMoveToFront(toBegin,
3444 MoveUtil::move(lvalue),
3449template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3450template <
class ALLOCATOR>
3457 ALLOCATOR allocator,
3460 const size_type frontSize = position - fromBegin;
3461 Iterator
begin = fromBegin;
3462 Iterator dest =
begin - 1;
3467 moveFront(&dest, &begin, frontSize);
3469 VALUE_TYPE& lvalue = value;
3472 MoveUtil::move(lvalue));
3474 *toBegin = fromBegin - 1;
3477template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3478template <
class ALLOCATOR>
3485 ALLOCATOR allocator,
3488 const size_type frontSize = position - fromBegin;
3489 Iterator
begin = fromBegin;
3490 Iterator dest =
begin - 1;
3495 MoveGuard guard(begin, dest, frontSize,
true);
3497 moveFront(&dest, &begin, frontSize);
3499 VALUE_TYPE& lvalue = value;
3502 MoveUtil::move(lvalue));
3506 *toBegin = fromBegin - 1;
3509template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3510template <
class ALLOCATOR>
3517 ALLOCATOR allocator,
3520 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
3522 ALLOCATOR> ElementGuard;
3524 size_type frontSize = position - fromBegin;
3525 Iterator
begin = fromBegin;
3526 Iterator dest =
begin - 1;
3530 ElementGuard guard(dest, dest, allocator);
3537 MoveUtil::move_if_noexcept(*begin));
3544 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
3545 *dest = MoveUtil::move_if_noexcept(*begin);
3550 VALUE_TYPE& lvalue = value;
3551 *dest = MoveUtil::move(lvalue);
3555 *toBegin = fromBegin - 1;
3558#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
3561#ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT
3562#define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT 10
3564#ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B
3565#define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT
3567#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
3568template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3569template <
class ALLOCATOR>
3576 ALLOCATOR allocator)
3582 VALUE = IS_BITWISECOPYABLE
3583 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3584 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3587 emplaceAndMoveToBackDispatch(
3596#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
3597template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3598template <
class ALLOCATOR,
class Args_01>
3605 ALLOCATOR allocator,
3612 VALUE = IS_BITWISECOPYABLE
3613 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3614 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3617 emplaceAndMoveToBackDispatch(
3627#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
3628template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3629template <
class ALLOCATOR,
class Args_01,
3637 ALLOCATOR allocator,
3645 VALUE = IS_BITWISECOPYABLE
3646 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3647 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3650 emplaceAndMoveToBackDispatch(
3661#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
3662template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3663template <
class ALLOCATOR,
class Args_01,
3672 ALLOCATOR allocator,
3681 VALUE = IS_BITWISECOPYABLE
3682 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3683 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3686 emplaceAndMoveToBackDispatch(
3698#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
3699template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3700template <
class ALLOCATOR,
class Args_01,
3710 ALLOCATOR allocator,
3720 VALUE = IS_BITWISECOPYABLE
3721 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3722 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3725 emplaceAndMoveToBackDispatch(
3738#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
3739template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3740template <
class ALLOCATOR,
class Args_01,
3751 ALLOCATOR allocator,
3762 VALUE = IS_BITWISECOPYABLE
3763 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3764 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3767 emplaceAndMoveToBackDispatch(
3781#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
3782template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3783template <
class ALLOCATOR,
class Args_01,
3795 ALLOCATOR allocator,
3807 VALUE = IS_BITWISECOPYABLE
3808 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3809 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3812 emplaceAndMoveToBackDispatch(
3827#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
3828template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3829template <
class ALLOCATOR,
class Args_01,
3842 ALLOCATOR allocator,
3855 VALUE = IS_BITWISECOPYABLE
3856 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3857 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3860 emplaceAndMoveToBackDispatch(
3876#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
3877template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3878template <
class ALLOCATOR,
class Args_01,
3892 ALLOCATOR allocator,
3906 VALUE = IS_BITWISECOPYABLE
3907 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3908 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3911 emplaceAndMoveToBackDispatch(
3928#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
3929template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3930template <
class ALLOCATOR,
class Args_01,
3945 ALLOCATOR allocator,
3960 VALUE = IS_BITWISECOPYABLE
3961 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
3962 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
3965 emplaceAndMoveToBackDispatch(
3983#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
3984template <
class VALUE_TYPE,
int BLOCK_LENGTH>
3985template <
class ALLOCATOR,
class Args_01,
4001 ALLOCATOR allocator,
4017 VALUE = IS_BITWISECOPYABLE
4018 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
4019 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
4022 emplaceAndMoveToBackDispatch(
4042#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
4043template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4044template <
class ALLOCATOR>
4050 ALLOCATOR allocator,
4053 const size_type backSize = fromEnd - position;
4054 Iterator
end = fromEnd;
4055 Iterator dest =
end + 1;
4058 moveBack(&dest, &end, backSize);
4065 *toEnd = fromEnd + 1;
4069#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
4070template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4071template <
class ALLOCATOR,
class Args_01>
4077 ALLOCATOR allocator,
4081 const size_type backSize = fromEnd - position;
4082 Iterator
end = fromEnd;
4083 Iterator dest =
end + 1;
4086 moveBack(&dest, &end, backSize);
4094 *toEnd = fromEnd + 1;
4098#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
4099template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4100template <
class ALLOCATOR,
class Args_01,
4107 ALLOCATOR allocator,
4112 const size_type backSize = fromEnd - position;
4113 Iterator
end = fromEnd;
4114 Iterator dest =
end + 1;
4117 moveBack(&dest, &end, backSize);
4126 *toEnd = fromEnd + 1;
4130#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
4131template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4132template <
class ALLOCATOR,
class Args_01,
4140 ALLOCATOR allocator,
4146 const size_type backSize = fromEnd - position;
4147 Iterator
end = fromEnd;
4148 Iterator dest =
end + 1;
4151 moveBack(&dest, &end, backSize);
4161 *toEnd = fromEnd + 1;
4165#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
4166template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4167template <
class ALLOCATOR,
class Args_01,
4176 ALLOCATOR allocator,
4183 const size_type backSize = fromEnd - position;
4184 Iterator
end = fromEnd;
4185 Iterator dest =
end + 1;
4188 moveBack(&dest, &end, backSize);
4199 *toEnd = fromEnd + 1;
4203#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
4204template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4205template <
class ALLOCATOR,
class Args_01,
4215 ALLOCATOR allocator,
4223 const size_type backSize = fromEnd - position;
4224 Iterator
end = fromEnd;
4225 Iterator dest =
end + 1;
4228 moveBack(&dest, &end, backSize);
4240 *toEnd = fromEnd + 1;
4244#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
4245template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4246template <
class ALLOCATOR,
class Args_01,
4257 ALLOCATOR allocator,
4266 const size_type backSize = fromEnd - position;
4267 Iterator
end = fromEnd;
4268 Iterator dest =
end + 1;
4271 moveBack(&dest, &end, backSize);
4284 *toEnd = fromEnd + 1;
4288#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
4289template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4290template <
class ALLOCATOR,
class Args_01,
4302 ALLOCATOR allocator,
4312 const size_type backSize = fromEnd - position;
4313 Iterator
end = fromEnd;
4314 Iterator dest =
end + 1;
4317 moveBack(&dest, &end, backSize);
4331 *toEnd = fromEnd + 1;
4335#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
4336template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4337template <
class ALLOCATOR,
class Args_01,
4350 ALLOCATOR allocator,
4361 const size_type backSize = fromEnd - position;
4362 Iterator
end = fromEnd;
4363 Iterator dest =
end + 1;
4366 moveBack(&dest, &end, backSize);
4381 *toEnd = fromEnd + 1;
4385#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
4386template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4387template <
class ALLOCATOR,
class Args_01,
4401 ALLOCATOR allocator,
4413 const size_type backSize = fromEnd - position;
4414 Iterator
end = fromEnd;
4415 Iterator dest =
end + 1;
4418 moveBack(&dest, &end, backSize);
4434 *toEnd = fromEnd + 1;
4438#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
4439template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4440template <
class ALLOCATOR,
class Args_01,
4455 ALLOCATOR allocator,
4468 const size_type backSize = fromEnd - position;
4469 Iterator
end = fromEnd;
4470 Iterator dest =
end + 1;
4473 moveBack(&dest, &end, backSize);
4490 *toEnd = fromEnd + 1;
4495#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
4496template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4497template <
class ALLOCATOR>
4503 ALLOCATOR allocator,
4506 const size_type backSize = fromEnd - position;
4507 Iterator
end = fromEnd;
4508 Iterator dest =
end + 1;
4511 MoveGuard guard(end, dest, backSize,
false);
4513 moveBack(&dest, &end, backSize);
4522 *toEnd = fromEnd + 1;
4526#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
4527template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4528template <
class ALLOCATOR,
class Args_01>
4534 ALLOCATOR allocator,
4538 const size_type backSize = fromEnd - position;
4539 Iterator
end = fromEnd;
4540 Iterator dest =
end + 1;
4543 MoveGuard guard(end, dest, backSize,
false);
4545 moveBack(&dest, &end, backSize);
4555 *toEnd = fromEnd + 1;
4559#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
4560template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4561template <
class ALLOCATOR,
class Args_01,
4568 ALLOCATOR allocator,
4573 const size_type backSize = fromEnd - position;
4574 Iterator
end = fromEnd;
4575 Iterator dest =
end + 1;
4578 MoveGuard guard(end, dest, backSize,
false);
4580 moveBack(&dest, &end, backSize);
4591 *toEnd = fromEnd + 1;
4595#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
4596template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4597template <
class ALLOCATOR,
class Args_01,
4605 ALLOCATOR allocator,
4611 const size_type backSize = fromEnd - position;
4612 Iterator
end = fromEnd;
4613 Iterator dest =
end + 1;
4616 MoveGuard guard(end, dest, backSize,
false);
4618 moveBack(&dest, &end, backSize);
4630 *toEnd = fromEnd + 1;
4634#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
4635template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4636template <
class ALLOCATOR,
class Args_01,
4645 ALLOCATOR allocator,
4652 const size_type backSize = fromEnd - position;
4653 Iterator
end = fromEnd;
4654 Iterator dest =
end + 1;
4657 MoveGuard guard(end, dest, backSize,
false);
4659 moveBack(&dest, &end, backSize);
4672 *toEnd = fromEnd + 1;
4676#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
4677template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4678template <
class ALLOCATOR,
class Args_01,
4688 ALLOCATOR allocator,
4696 const size_type backSize = fromEnd - position;
4697 Iterator
end = fromEnd;
4698 Iterator dest =
end + 1;
4701 MoveGuard guard(end, dest, backSize,
false);
4703 moveBack(&dest, &end, backSize);
4717 *toEnd = fromEnd + 1;
4721#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
4722template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4723template <
class ALLOCATOR,
class Args_01,
4734 ALLOCATOR allocator,
4743 const size_type backSize = fromEnd - position;
4744 Iterator
end = fromEnd;
4745 Iterator dest =
end + 1;
4748 MoveGuard guard(end, dest, backSize,
false);
4750 moveBack(&dest, &end, backSize);
4765 *toEnd = fromEnd + 1;
4769#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
4770template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4771template <
class ALLOCATOR,
class Args_01,
4783 ALLOCATOR allocator,
4793 const size_type backSize = fromEnd - position;
4794 Iterator
end = fromEnd;
4795 Iterator dest =
end + 1;
4798 MoveGuard guard(end, dest, backSize,
false);
4800 moveBack(&dest, &end, backSize);
4816 *toEnd = fromEnd + 1;
4820#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
4821template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4822template <
class ALLOCATOR,
class Args_01,
4835 ALLOCATOR allocator,
4846 const size_type backSize = fromEnd - position;
4847 Iterator
end = fromEnd;
4848 Iterator dest =
end + 1;
4851 MoveGuard guard(end, dest, backSize,
false);
4853 moveBack(&dest, &end, backSize);
4870 *toEnd = fromEnd + 1;
4874#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
4875template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4876template <
class ALLOCATOR,
class Args_01,
4890 ALLOCATOR allocator,
4902 const size_type backSize = fromEnd - position;
4903 Iterator
end = fromEnd;
4904 Iterator dest =
end + 1;
4907 MoveGuard guard(end, dest, backSize,
false);
4909 moveBack(&dest, &end, backSize);
4927 *toEnd = fromEnd + 1;
4931#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
4932template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4933template <
class ALLOCATOR,
class Args_01,
4948 ALLOCATOR allocator,
4961 const size_type backSize = fromEnd - position;
4962 Iterator
end = fromEnd;
4963 Iterator dest =
end + 1;
4966 MoveGuard guard(end, dest, backSize,
false);
4968 moveBack(&dest, &end, backSize);
4987 *toEnd = fromEnd + 1;
4992#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
4993template <
class VALUE_TYPE,
int BLOCK_LENGTH>
4994template <
class ALLOCATOR>
5000 ALLOCATOR allocator,
5003 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5005 ALLOCATOR> ElementGuard;
5007 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5008 BLOCK_LENGTH> EndpointProctor;
5010 size_type backSize = fromEnd - position;
5011 Iterator
end = fromEnd;
5012 Iterator dest =
end + 1;
5016 ElementGuard guard(dest, dest, allocator);
5024 MoveUtil::move_if_noexcept(*end));
5025 guard.moveBegin(-1);
5029 for (backSize -= 1; 0 < backSize; --backSize) {
5032 *dest = MoveUtil::move_if_noexcept(*end);
5035 guard.moveBegin(-n);
5042 EndpointProctor endpointProctor(toEnd, position);
5046 position.valuePtr());
5048 endpointProctor.release();
5051 *toEnd = fromEnd + 1;
5055#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
5056template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5057template <
class ALLOCATOR,
class Args_01>
5063 ALLOCATOR allocator,
5067 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5069 ALLOCATOR> ElementGuard;
5071 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5072 BLOCK_LENGTH> EndpointProctor;
5074 size_type backSize = fromEnd - position;
5075 Iterator
end = fromEnd;
5076 Iterator dest =
end + 1;
5080 ElementGuard guard(dest, dest, allocator);
5088 MoveUtil::move_if_noexcept(*end));
5089 guard.moveBegin(-1);
5093 for (backSize -= 1; 0 < backSize; --backSize) {
5096 *dest = MoveUtil::move_if_noexcept(*end);
5099 guard.moveBegin(-n);
5106 EndpointProctor endpointProctor(toEnd, position);
5110 position.valuePtr(),
5113 endpointProctor.release();
5116 *toEnd = fromEnd + 1;
5120#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
5121template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5122template <
class ALLOCATOR,
class Args_01,
5129 ALLOCATOR allocator,
5134 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5136 ALLOCATOR> ElementGuard;
5138 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5139 BLOCK_LENGTH> EndpointProctor;
5141 size_type backSize = fromEnd - position;
5142 Iterator
end = fromEnd;
5143 Iterator dest =
end + 1;
5147 ElementGuard guard(dest, dest, allocator);
5155 MoveUtil::move_if_noexcept(*end));
5156 guard.moveBegin(-1);
5160 for (backSize -= 1; 0 < backSize; --backSize) {
5163 *dest = MoveUtil::move_if_noexcept(*end);
5166 guard.moveBegin(-n);
5173 EndpointProctor endpointProctor(toEnd, position);
5177 position.valuePtr(),
5181 endpointProctor.release();
5184 *toEnd = fromEnd + 1;
5188#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
5189template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5190template <
class ALLOCATOR,
class Args_01,
5198 ALLOCATOR allocator,
5204 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5206 ALLOCATOR> ElementGuard;
5208 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5209 BLOCK_LENGTH> EndpointProctor;
5211 size_type backSize = fromEnd - position;
5212 Iterator
end = fromEnd;
5213 Iterator dest =
end + 1;
5217 ElementGuard guard(dest, dest, allocator);
5225 MoveUtil::move_if_noexcept(*end));
5226 guard.moveBegin(-1);
5230 for (backSize -= 1; 0 < backSize; --backSize) {
5233 *dest = MoveUtil::move_if_noexcept(*end);
5236 guard.moveBegin(-n);
5243 EndpointProctor endpointProctor(toEnd, position);
5247 position.valuePtr(),
5252 endpointProctor.release();
5255 *toEnd = fromEnd + 1;
5259#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
5260template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5261template <
class ALLOCATOR,
class Args_01,
5270 ALLOCATOR allocator,
5277 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5279 ALLOCATOR> ElementGuard;
5281 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5282 BLOCK_LENGTH> EndpointProctor;
5284 size_type backSize = fromEnd - position;
5285 Iterator
end = fromEnd;
5286 Iterator dest =
end + 1;
5290 ElementGuard guard(dest, dest, allocator);
5298 MoveUtil::move_if_noexcept(*end));
5299 guard.moveBegin(-1);
5303 for (backSize -= 1; 0 < backSize; --backSize) {
5306 *dest = MoveUtil::move_if_noexcept(*end);
5309 guard.moveBegin(-n);
5316 EndpointProctor endpointProctor(toEnd, position);
5320 position.valuePtr(),
5326 endpointProctor.release();
5329 *toEnd = fromEnd + 1;
5333#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
5334template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5335template <
class ALLOCATOR,
class Args_01,
5345 ALLOCATOR allocator,
5353 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5355 ALLOCATOR> ElementGuard;
5357 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5358 BLOCK_LENGTH> EndpointProctor;
5360 size_type backSize = fromEnd - position;
5361 Iterator
end = fromEnd;
5362 Iterator dest =
end + 1;
5366 ElementGuard guard(dest, dest, allocator);
5374 MoveUtil::move_if_noexcept(*end));
5375 guard.moveBegin(-1);
5379 for (backSize -= 1; 0 < backSize; --backSize) {
5382 *dest = MoveUtil::move_if_noexcept(*end);
5385 guard.moveBegin(-n);
5392 EndpointProctor endpointProctor(toEnd, position);
5396 position.valuePtr(),
5403 endpointProctor.release();
5406 *toEnd = fromEnd + 1;
5410#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
5411template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5412template <
class ALLOCATOR,
class Args_01,
5423 ALLOCATOR allocator,
5432 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5434 ALLOCATOR> ElementGuard;
5436 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5437 BLOCK_LENGTH> EndpointProctor;
5439 size_type backSize = fromEnd - position;
5440 Iterator
end = fromEnd;
5441 Iterator dest =
end + 1;
5445 ElementGuard guard(dest, dest, allocator);
5453 MoveUtil::move_if_noexcept(*end));
5454 guard.moveBegin(-1);
5458 for (backSize -= 1; 0 < backSize; --backSize) {
5461 *dest = MoveUtil::move_if_noexcept(*end);
5464 guard.moveBegin(-n);
5471 EndpointProctor endpointProctor(toEnd, position);
5475 position.valuePtr(),
5483 endpointProctor.release();
5486 *toEnd = fromEnd + 1;
5490#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
5491template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5492template <
class ALLOCATOR,
class Args_01,
5504 ALLOCATOR allocator,
5514 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5516 ALLOCATOR> ElementGuard;
5518 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5519 BLOCK_LENGTH> EndpointProctor;
5521 size_type backSize = fromEnd - position;
5522 Iterator
end = fromEnd;
5523 Iterator dest =
end + 1;
5527 ElementGuard guard(dest, dest, allocator);
5535 MoveUtil::move_if_noexcept(*end));
5536 guard.moveBegin(-1);
5540 for (backSize -= 1; 0 < backSize; --backSize) {
5543 *dest = MoveUtil::move_if_noexcept(*end);
5546 guard.moveBegin(-n);
5553 EndpointProctor endpointProctor(toEnd, position);
5557 position.valuePtr(),
5566 endpointProctor.release();
5569 *toEnd = fromEnd + 1;
5573#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
5574template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5575template <
class ALLOCATOR,
class Args_01,
5588 ALLOCATOR allocator,
5599 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5601 ALLOCATOR> ElementGuard;
5603 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5604 BLOCK_LENGTH> EndpointProctor;
5606 size_type backSize = fromEnd - position;
5607 Iterator
end = fromEnd;
5608 Iterator dest =
end + 1;
5612 ElementGuard guard(dest, dest, allocator);
5620 MoveUtil::move_if_noexcept(*end));
5621 guard.moveBegin(-1);
5625 for (backSize -= 1; 0 < backSize; --backSize) {
5628 *dest = MoveUtil::move_if_noexcept(*end);
5631 guard.moveBegin(-n);
5638 EndpointProctor endpointProctor(toEnd, position);
5642 position.valuePtr(),
5652 endpointProctor.release();
5655 *toEnd = fromEnd + 1;
5659#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
5660template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5661template <
class ALLOCATOR,
class Args_01,
5675 ALLOCATOR allocator,
5687 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5689 ALLOCATOR> ElementGuard;
5691 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5692 BLOCK_LENGTH> EndpointProctor;
5694 size_type backSize = fromEnd - position;
5695 Iterator
end = fromEnd;
5696 Iterator dest =
end + 1;
5700 ElementGuard guard(dest, dest, allocator);
5708 MoveUtil::move_if_noexcept(*end));
5709 guard.moveBegin(-1);
5713 for (backSize -= 1; 0 < backSize; --backSize) {
5716 *dest = MoveUtil::move_if_noexcept(*end);
5719 guard.moveBegin(-n);
5726 EndpointProctor endpointProctor(toEnd, position);
5730 position.valuePtr(),
5741 endpointProctor.release();
5744 *toEnd = fromEnd + 1;
5748#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
5749template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5750template <
class ALLOCATOR,
class Args_01,
5765 ALLOCATOR allocator,
5778 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
5780 ALLOCATOR> ElementGuard;
5782 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
5783 BLOCK_LENGTH> EndpointProctor;
5785 size_type backSize = fromEnd - position;
5786 Iterator
end = fromEnd;
5787 Iterator dest =
end + 1;
5791 ElementGuard guard(dest, dest, allocator);
5799 MoveUtil::move_if_noexcept(*end));
5800 guard.moveBegin(-1);
5804 for (backSize -= 1; 0 < backSize; --backSize) {
5807 *dest = MoveUtil::move_if_noexcept(*end);
5810 guard.moveBegin(-n);
5817 EndpointProctor endpointProctor(toEnd, position);
5821 position.valuePtr(),
5833 endpointProctor.release();
5836 *toEnd = fromEnd + 1;
5841#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
5842template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5843template <
class ALLOCATOR>
5850 ALLOCATOR allocator)
5856 VALUE = IS_BITWISECOPYABLE
5857 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
5858 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
5861 emplaceAndMoveToFrontDispatch(
5870#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
5871template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5872template <
class ALLOCATOR,
class Args_01>
5879 ALLOCATOR allocator,
5886 VALUE = IS_BITWISECOPYABLE
5887 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
5888 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
5891 emplaceAndMoveToFrontDispatch(
5901#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
5902template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5903template <
class ALLOCATOR,
class Args_01,
5911 ALLOCATOR allocator,
5919 VALUE = IS_BITWISECOPYABLE
5920 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
5921 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
5924 emplaceAndMoveToFrontDispatch(
5935#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
5936template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5937template <
class ALLOCATOR,
class Args_01,
5946 ALLOCATOR allocator,
5955 VALUE = IS_BITWISECOPYABLE
5956 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
5957 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
5960 emplaceAndMoveToFrontDispatch(
5972#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
5973template <
class VALUE_TYPE,
int BLOCK_LENGTH>
5974template <
class ALLOCATOR,
class Args_01,
5984 ALLOCATOR allocator,
5994 VALUE = IS_BITWISECOPYABLE
5995 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
5996 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
5999 emplaceAndMoveToFrontDispatch(
6012#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
6013template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6014template <
class ALLOCATOR,
class Args_01,
6025 ALLOCATOR allocator,
6036 VALUE = IS_BITWISECOPYABLE
6037 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
6038 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
6041 emplaceAndMoveToFrontDispatch(
6055#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
6056template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6057template <
class ALLOCATOR,
class Args_01,
6069 ALLOCATOR allocator,
6081 VALUE = IS_BITWISECOPYABLE
6082 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
6083 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
6086 emplaceAndMoveToFrontDispatch(
6101#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
6102template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6103template <
class ALLOCATOR,
class Args_01,
6116 ALLOCATOR allocator,
6129 VALUE = IS_BITWISECOPYABLE
6130 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
6131 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
6134 emplaceAndMoveToFrontDispatch(
6150#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
6151template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6152template <
class ALLOCATOR,
class Args_01,
6166 ALLOCATOR allocator,
6180 VALUE = IS_BITWISECOPYABLE
6181 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
6182 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
6185 emplaceAndMoveToFrontDispatch(
6202#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
6203template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6204template <
class ALLOCATOR,
class Args_01,
6219 ALLOCATOR allocator,
6234 VALUE = IS_BITWISECOPYABLE
6235 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
6236 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
6239 emplaceAndMoveToFrontDispatch(
6257#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
6258template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6259template <
class ALLOCATOR,
class Args_01,
6275 ALLOCATOR allocator,
6291 VALUE = IS_BITWISECOPYABLE
6292 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
6293 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
6296 emplaceAndMoveToFrontDispatch(
6316#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
6317template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6318template <
class ALLOCATOR>
6324 ALLOCATOR allocator,
6327 const size_type frontSize = position - fromBegin;
6328 Iterator
begin = fromBegin;
6329 Iterator dest =
begin - 1;
6332 moveFront(&dest, &begin, frontSize);
6338 *toBegin = fromBegin - 1;
6342#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
6343template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6344template <
class ALLOCATOR,
class Args_01>
6350 ALLOCATOR allocator,
6354 const size_type frontSize = position - fromBegin;
6355 Iterator
begin = fromBegin;
6356 Iterator dest =
begin - 1;
6359 moveFront(&dest, &begin, frontSize);
6366 *toBegin = fromBegin - 1;
6370#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
6371template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6372template <
class ALLOCATOR,
class Args_01,
6379 ALLOCATOR allocator,
6384 const size_type frontSize = position - fromBegin;
6385 Iterator
begin = fromBegin;
6386 Iterator dest =
begin - 1;
6389 moveFront(&dest, &begin, frontSize);
6397 *toBegin = fromBegin - 1;
6401#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
6402template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6403template <
class ALLOCATOR,
class Args_01,
6411 ALLOCATOR allocator,
6417 const size_type frontSize = position - fromBegin;
6418 Iterator
begin = fromBegin;
6419 Iterator dest =
begin - 1;
6422 moveFront(&dest, &begin, frontSize);
6431 *toBegin = fromBegin - 1;
6435#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
6436template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6437template <
class ALLOCATOR,
class Args_01,
6446 ALLOCATOR allocator,
6453 const size_type frontSize = position - fromBegin;
6454 Iterator
begin = fromBegin;
6455 Iterator dest =
begin - 1;
6458 moveFront(&dest, &begin, frontSize);
6468 *toBegin = fromBegin - 1;
6472#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
6473template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6474template <
class ALLOCATOR,
class Args_01,
6484 ALLOCATOR allocator,
6492 const size_type frontSize = position - fromBegin;
6493 Iterator
begin = fromBegin;
6494 Iterator dest =
begin - 1;
6497 moveFront(&dest, &begin, frontSize);
6508 *toBegin = fromBegin - 1;
6512#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
6513template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6514template <
class ALLOCATOR,
class Args_01,
6525 ALLOCATOR allocator,
6534 const size_type frontSize = position - fromBegin;
6535 Iterator
begin = fromBegin;
6536 Iterator dest =
begin - 1;
6539 moveFront(&dest, &begin, frontSize);
6551 *toBegin = fromBegin - 1;
6555#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
6556template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6557template <
class ALLOCATOR,
class Args_01,
6569 ALLOCATOR allocator,
6579 const size_type frontSize = position - fromBegin;
6580 Iterator
begin = fromBegin;
6581 Iterator dest =
begin - 1;
6584 moveFront(&dest, &begin, frontSize);
6597 *toBegin = fromBegin - 1;
6601#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
6602template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6603template <
class ALLOCATOR,
class Args_01,
6616 ALLOCATOR allocator,
6627 const size_type frontSize = position - fromBegin;
6628 Iterator
begin = fromBegin;
6629 Iterator dest =
begin - 1;
6632 moveFront(&dest, &begin, frontSize);
6646 *toBegin = fromBegin - 1;
6650#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
6651template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6652template <
class ALLOCATOR,
class Args_01,
6666 ALLOCATOR allocator,
6678 const size_type frontSize = position - fromBegin;
6679 Iterator
begin = fromBegin;
6680 Iterator dest =
begin - 1;
6683 moveFront(&dest, &begin, frontSize);
6698 *toBegin = fromBegin - 1;
6702#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
6703template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6704template <
class ALLOCATOR,
class Args_01,
6719 ALLOCATOR allocator,
6732 const size_type frontSize = position - fromBegin;
6733 Iterator
begin = fromBegin;
6734 Iterator dest =
begin - 1;
6737 moveFront(&dest, &begin, frontSize);
6753 *toBegin = fromBegin - 1;
6758#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
6759template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6760template <
class ALLOCATOR>
6766 ALLOCATOR allocator,
6769 const size_type frontSize = position - fromBegin;
6770 Iterator
begin = fromBegin;
6771 Iterator dest =
begin - 1;
6774 MoveGuard guard(begin, dest, frontSize,
true);
6776 moveFront(&dest, &begin, frontSize);
6784 *toBegin = fromBegin - 1;
6788#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
6789template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6790template <
class ALLOCATOR,
class Args_01>
6796 ALLOCATOR allocator,
6800 const size_type frontSize = position - fromBegin;
6801 Iterator
begin = fromBegin;
6802 Iterator dest =
begin - 1;
6805 MoveGuard guard(begin, dest, frontSize,
true);
6807 moveFront(&dest, &begin, frontSize);
6816 *toBegin = fromBegin - 1;
6820#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
6821template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6822template <
class ALLOCATOR,
class Args_01,
6829 ALLOCATOR allocator,
6834 const size_type frontSize = position - fromBegin;
6835 Iterator
begin = fromBegin;
6836 Iterator dest =
begin - 1;
6839 MoveGuard guard(begin, dest, frontSize,
true);
6841 moveFront(&dest, &begin, frontSize);
6851 *toBegin = fromBegin - 1;
6855#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
6856template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6857template <
class ALLOCATOR,
class Args_01,
6865 ALLOCATOR allocator,
6871 const size_type frontSize = position - fromBegin;
6872 Iterator
begin = fromBegin;
6873 Iterator dest =
begin - 1;
6876 MoveGuard guard(begin, dest, frontSize,
true);
6878 moveFront(&dest, &begin, frontSize);
6889 *toBegin = fromBegin - 1;
6893#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
6894template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6895template <
class ALLOCATOR,
class Args_01,
6904 ALLOCATOR allocator,
6911 const size_type frontSize = position - fromBegin;
6912 Iterator
begin = fromBegin;
6913 Iterator dest =
begin - 1;
6916 MoveGuard guard(begin, dest, frontSize,
true);
6918 moveFront(&dest, &begin, frontSize);
6930 *toBegin = fromBegin - 1;
6934#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
6935template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6936template <
class ALLOCATOR,
class Args_01,
6946 ALLOCATOR allocator,
6954 const size_type frontSize = position - fromBegin;
6955 Iterator
begin = fromBegin;
6956 Iterator dest =
begin - 1;
6959 MoveGuard guard(begin, dest, frontSize,
true);
6961 moveFront(&dest, &begin, frontSize);
6974 *toBegin = fromBegin - 1;
6978#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
6979template <
class VALUE_TYPE,
int BLOCK_LENGTH>
6980template <
class ALLOCATOR,
class Args_01,
6991 ALLOCATOR allocator,
7000 const size_type frontSize = position - fromBegin;
7001 Iterator
begin = fromBegin;
7002 Iterator dest =
begin - 1;
7005 MoveGuard guard(begin, dest, frontSize,
true);
7007 moveFront(&dest, &begin, frontSize);
7021 *toBegin = fromBegin - 1;
7025#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
7026template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7027template <
class ALLOCATOR,
class Args_01,
7039 ALLOCATOR allocator,
7049 const size_type frontSize = position - fromBegin;
7050 Iterator
begin = fromBegin;
7051 Iterator dest =
begin - 1;
7054 MoveGuard guard(begin, dest, frontSize,
true);
7056 moveFront(&dest, &begin, frontSize);
7071 *toBegin = fromBegin - 1;
7075#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
7076template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7077template <
class ALLOCATOR,
class Args_01,
7090 ALLOCATOR allocator,
7101 const size_type frontSize = position - fromBegin;
7102 Iterator
begin = fromBegin;
7103 Iterator dest =
begin - 1;
7106 MoveGuard guard(begin, dest, frontSize,
true);
7108 moveFront(&dest, &begin, frontSize);
7124 *toBegin = fromBegin - 1;
7128#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
7129template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7130template <
class ALLOCATOR,
class Args_01,
7144 ALLOCATOR allocator,
7156 const size_type frontSize = position - fromBegin;
7157 Iterator
begin = fromBegin;
7158 Iterator dest =
begin - 1;
7161 MoveGuard guard(begin, dest, frontSize,
true);
7163 moveFront(&dest, &begin, frontSize);
7180 *toBegin = fromBegin - 1;
7184#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
7185template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7186template <
class ALLOCATOR,
class Args_01,
7201 ALLOCATOR allocator,
7214 const size_type frontSize = position - fromBegin;
7215 Iterator
begin = fromBegin;
7216 Iterator dest =
begin - 1;
7219 MoveGuard guard(begin, dest, frontSize,
true);
7221 moveFront(&dest, &begin, frontSize);
7239 *toBegin = fromBegin - 1;
7244#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0
7245template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7246template <
class ALLOCATOR>
7252 ALLOCATOR allocator,
7255 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7257 ALLOCATOR> ElementGuard;
7259 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7260 BLOCK_LENGTH> EndpointProctor;
7262 size_type frontSize = position - fromBegin;
7263 Iterator
begin = fromBegin;
7264 Iterator dest =
begin - 1;
7268 ElementGuard guard(dest, dest, allocator);
7274 MoveUtil::move_if_noexcept(*begin));
7281 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7282 *dest = MoveUtil::move_if_noexcept(*begin);
7292 EndpointProctor endpointProctor(toBegin, position);
7298 endpointProctor.release();
7301 *toBegin = fromBegin - 1;
7305#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1
7306template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7307template <
class ALLOCATOR,
class Args_01>
7313 ALLOCATOR allocator,
7317 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7319 ALLOCATOR> ElementGuard;
7321 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7322 BLOCK_LENGTH> EndpointProctor;
7324 size_type frontSize = position - fromBegin;
7325 Iterator
begin = fromBegin;
7326 Iterator dest =
begin - 1;
7330 ElementGuard guard(dest, dest, allocator);
7336 MoveUtil::move_if_noexcept(*begin));
7343 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7344 *dest = MoveUtil::move_if_noexcept(*begin);
7354 EndpointProctor endpointProctor(toBegin, position);
7361 endpointProctor.release();
7364 *toBegin = fromBegin - 1;
7368#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2
7369template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7370template <
class ALLOCATOR,
class Args_01,
7377 ALLOCATOR allocator,
7382 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7384 ALLOCATOR> ElementGuard;
7386 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7387 BLOCK_LENGTH> EndpointProctor;
7389 size_type frontSize = position - fromBegin;
7390 Iterator
begin = fromBegin;
7391 Iterator dest =
begin - 1;
7395 ElementGuard guard(dest, dest, allocator);
7401 MoveUtil::move_if_noexcept(*begin));
7408 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7409 *dest = MoveUtil::move_if_noexcept(*begin);
7419 EndpointProctor endpointProctor(toBegin, position);
7427 endpointProctor.release();
7430 *toBegin = fromBegin - 1;
7434#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3
7435template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7436template <
class ALLOCATOR,
class Args_01,
7444 ALLOCATOR allocator,
7450 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7452 ALLOCATOR> ElementGuard;
7454 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7455 BLOCK_LENGTH> EndpointProctor;
7457 size_type frontSize = position - fromBegin;
7458 Iterator
begin = fromBegin;
7459 Iterator dest =
begin - 1;
7463 ElementGuard guard(dest, dest, allocator);
7469 MoveUtil::move_if_noexcept(*begin));
7476 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7477 *dest = MoveUtil::move_if_noexcept(*begin);
7487 EndpointProctor endpointProctor(toBegin, position);
7496 endpointProctor.release();
7499 *toBegin = fromBegin - 1;
7503#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4
7504template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7505template <
class ALLOCATOR,
class Args_01,
7514 ALLOCATOR allocator,
7521 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7523 ALLOCATOR> ElementGuard;
7525 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7526 BLOCK_LENGTH> EndpointProctor;
7528 size_type frontSize = position - fromBegin;
7529 Iterator
begin = fromBegin;
7530 Iterator dest =
begin - 1;
7534 ElementGuard guard(dest, dest, allocator);
7540 MoveUtil::move_if_noexcept(*begin));
7547 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7548 *dest = MoveUtil::move_if_noexcept(*begin);
7558 EndpointProctor endpointProctor(toBegin, position);
7568 endpointProctor.release();
7571 *toBegin = fromBegin - 1;
7575#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5
7576template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7577template <
class ALLOCATOR,
class Args_01,
7587 ALLOCATOR allocator,
7595 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7597 ALLOCATOR> ElementGuard;
7599 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7600 BLOCK_LENGTH> EndpointProctor;
7602 size_type frontSize = position - fromBegin;
7603 Iterator
begin = fromBegin;
7604 Iterator dest =
begin - 1;
7608 ElementGuard guard(dest, dest, allocator);
7614 MoveUtil::move_if_noexcept(*begin));
7621 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7622 *dest = MoveUtil::move_if_noexcept(*begin);
7632 EndpointProctor endpointProctor(toBegin, position);
7643 endpointProctor.release();
7646 *toBegin = fromBegin - 1;
7650#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6
7651template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7652template <
class ALLOCATOR,
class Args_01,
7663 ALLOCATOR allocator,
7672 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7674 ALLOCATOR> ElementGuard;
7676 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7677 BLOCK_LENGTH> EndpointProctor;
7679 size_type frontSize = position - fromBegin;
7680 Iterator
begin = fromBegin;
7681 Iterator dest =
begin - 1;
7685 ElementGuard guard(dest, dest, allocator);
7691 MoveUtil::move_if_noexcept(*begin));
7698 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7699 *dest = MoveUtil::move_if_noexcept(*begin);
7709 EndpointProctor endpointProctor(toBegin, position);
7721 endpointProctor.release();
7724 *toBegin = fromBegin - 1;
7728#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7
7729template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7730template <
class ALLOCATOR,
class Args_01,
7742 ALLOCATOR allocator,
7752 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7754 ALLOCATOR> ElementGuard;
7756 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7757 BLOCK_LENGTH> EndpointProctor;
7759 size_type frontSize = position - fromBegin;
7760 Iterator
begin = fromBegin;
7761 Iterator dest =
begin - 1;
7765 ElementGuard guard(dest, dest, allocator);
7771 MoveUtil::move_if_noexcept(*begin));
7778 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7779 *dest = MoveUtil::move_if_noexcept(*begin);
7789 EndpointProctor endpointProctor(toBegin, position);
7802 endpointProctor.release();
7805 *toBegin = fromBegin - 1;
7809#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8
7810template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7811template <
class ALLOCATOR,
class Args_01,
7824 ALLOCATOR allocator,
7835 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7837 ALLOCATOR> ElementGuard;
7839 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7840 BLOCK_LENGTH> EndpointProctor;
7842 size_type frontSize = position - fromBegin;
7843 Iterator
begin = fromBegin;
7844 Iterator dest =
begin - 1;
7848 ElementGuard guard(dest, dest, allocator);
7854 MoveUtil::move_if_noexcept(*begin));
7861 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7862 *dest = MoveUtil::move_if_noexcept(*begin);
7872 EndpointProctor endpointProctor(toBegin, position);
7886 endpointProctor.release();
7889 *toBegin = fromBegin - 1;
7893#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9
7894template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7895template <
class ALLOCATOR,
class Args_01,
7909 ALLOCATOR allocator,
7921 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
7923 ALLOCATOR> ElementGuard;
7925 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
7926 BLOCK_LENGTH> EndpointProctor;
7928 size_type frontSize = position - fromBegin;
7929 Iterator
begin = fromBegin;
7930 Iterator dest =
begin - 1;
7934 ElementGuard guard(dest, dest, allocator);
7940 MoveUtil::move_if_noexcept(*begin));
7947 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
7948 *dest = MoveUtil::move_if_noexcept(*begin);
7958 EndpointProctor endpointProctor(toBegin, position);
7973 endpointProctor.release();
7976 *toBegin = fromBegin - 1;
7980#if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10
7981template <
class VALUE_TYPE,
int BLOCK_LENGTH>
7982template <
class ALLOCATOR,
class Args_01,
7997 ALLOCATOR allocator,
8010 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
8012 ALLOCATOR> ElementGuard;
8014 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
8015 BLOCK_LENGTH> EndpointProctor;
8017 size_type frontSize = position - fromBegin;
8018 Iterator
begin = fromBegin;
8019 Iterator dest =
begin - 1;
8023 ElementGuard guard(dest, dest, allocator);
8029 MoveUtil::move_if_noexcept(*begin));
8036 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
8037 *dest = MoveUtil::move_if_noexcept(*begin);
8047 EndpointProctor endpointProctor(toBegin, position);
8063 endpointProctor.release();
8066 *toBegin = fromBegin - 1;
8073template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8074template <
class ALLOCATOR,
class... Args>
8081 ALLOCATOR allocator,
8088 VALUE = IS_BITWISECOPYABLE
8089 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
8090 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
8093 emplaceAndMoveToBackDispatch(
8102template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8103template <
class ALLOCATOR,
class... Args>
8109 ALLOCATOR allocator,
8113 const size_type backSize = fromEnd - position;
8114 Iterator
end = fromEnd;
8115 Iterator dest =
end + 1;
8118 moveBack(&dest, &end, backSize);
8126 *toEnd = fromEnd + 1;
8129template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8130template <
class ALLOCATOR,
class... Args>
8136 ALLOCATOR allocator,
8140 const size_type backSize = fromEnd - position;
8141 Iterator
end = fromEnd;
8142 Iterator dest =
end + 1;
8145 MoveGuard guard(end, dest, backSize,
false);
8147 moveBack(&dest, &end, backSize);
8157 *toEnd = fromEnd + 1;
8160template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8161template <
class ALLOCATOR,
class... Args>
8167 ALLOCATOR allocator,
8171 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
8173 ALLOCATOR> ElementGuard;
8175 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
8176 BLOCK_LENGTH> EndpointProctor;
8178 size_type backSize = fromEnd - position;
8179 Iterator
end = fromEnd;
8180 Iterator dest =
end + 1;
8184 ElementGuard guard(dest, dest, allocator);
8192 MoveUtil::move_if_noexcept(*end));
8193 guard.moveBegin(-1);
8197 for (backSize -= 1; 0 < backSize; --backSize) {
8200 *dest = MoveUtil::move_if_noexcept(*end);
8203 guard.moveBegin(-n);
8210 EndpointProctor endpointProctor(toEnd, position);
8214 position.valuePtr(),
8217 endpointProctor.release();
8220 *toEnd = fromEnd + 1;
8223template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8224template <
class ALLOCATOR,
class... Args>
8231 ALLOCATOR allocator,
8238 VALUE = IS_BITWISECOPYABLE
8239 ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE
8240 ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS
8243 emplaceAndMoveToFrontDispatch(
8252template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8253template <
class ALLOCATOR,
class... Args>
8259 ALLOCATOR allocator,
8263 const size_type frontSize = position - fromBegin;
8264 Iterator
begin = fromBegin;
8265 Iterator dest =
begin - 1;
8268 moveFront(&dest, &begin, frontSize);
8275 *toBegin = fromBegin - 1;
8278template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8279template <
class ALLOCATOR,
class... Args>
8285 ALLOCATOR allocator,
8289 const size_type frontSize = position - fromBegin;
8290 Iterator
begin = fromBegin;
8291 Iterator dest =
begin - 1;
8294 MoveGuard guard(begin, dest, frontSize,
true);
8296 moveFront(&dest, &begin, frontSize);
8305 *toBegin = fromBegin - 1;
8308template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8309template <
class ALLOCATOR,
class... Args>
8315 ALLOCATOR allocator,
8319 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
8321 ALLOCATOR> ElementGuard;
8323 typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE,
8324 BLOCK_LENGTH> EndpointProctor;
8326 size_type frontSize = position - fromBegin;
8327 Iterator
begin = fromBegin;
8328 Iterator dest =
begin - 1;
8332 ElementGuard guard(dest, dest, allocator);
8338 MoveUtil::move_if_noexcept(*begin));
8345 for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++
begin) {
8346 *dest = MoveUtil::move_if_noexcept(*begin);
8356 EndpointProctor endpointProctor(toBegin, position);
8363 endpointProctor.release();
8366 *toBegin = fromBegin - 1;
8371template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8372void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
8373 ::moveBack(Iterator *destination,
8375 size_type numElements)
8377 if (destination->offsetInBlock() > numElements
8378 && source->offsetInBlock() > numElements) {
8381 *destination -= numElements;
8382 *source -= numElements;
8383 std::memmove((
void *)destination->valuePtr(),
8385 numElements *
sizeof(VALUE_TYPE));
8440 size_type firstSegment, secondSegment;
8441 if (source->offsetInBlock() > destination->offsetInBlock()) {
8442 firstSegment = destination->offsetInBlock();
8443 secondSegment = source->offsetInBlock() - firstSegment;
8446 firstSegment = source->offsetInBlock();
8447 secondSegment = destination->offsetInBlock() - firstSegment;
8450 size_type thirdSegment = BLOCK_LENGTH - secondSegment;
8452 *destination -= firstSegment;
8453 *source -= firstSegment;
8454 numElements -= firstSegment;
8456 std::memmove((
void *)destination->valuePtr(),
8458 firstSegment *
sizeof(VALUE_TYPE));
8460 for (; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) {
8462 *destination -= secondSegment;
8463 *source -= secondSegment;
8465 std::memmove((
void *)destination->valuePtr(),
8467 secondSegment *
sizeof(VALUE_TYPE));
8469 *destination -= thirdSegment;
8470 *source -= thirdSegment;
8472 std::memmove((
void *)destination->valuePtr(),
8474 thirdSegment *
sizeof(VALUE_TYPE));
8477 size_type remaining = numElements > secondSegment
8481 *destination -= remaining;
8482 *source -= remaining;
8483 numElements -= remaining;
8485 std::memmove((
void *)destination->valuePtr(),
8487 remaining *
sizeof(VALUE_TYPE));
8489 *destination -= numElements;
8490 *source -= numElements;
8492 std::memmove((
void *)destination->valuePtr(),
8494 numElements *
sizeof(VALUE_TYPE));
8497template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8498void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
8499 ::moveFront(Iterator *destination,
8501 size_type numElements)
8503 if (destination->remainingInBlock() > numElements
8504 && source->remainingInBlock() > numElements) {
8507 std::memmove((
void *)destination->valuePtr(),
8509 numElements *
sizeof(VALUE_TYPE));
8510 *destination += numElements;
8511 *source += numElements;
8566 size_type firstSegment, secondSegment;
8567 if (source->remainingInBlock() > destination->remainingInBlock()) {
8568 firstSegment = destination->remainingInBlock();
8569 secondSegment = source->remainingInBlock() - firstSegment;
8572 firstSegment = source->remainingInBlock();
8573 secondSegment = destination->remainingInBlock() - firstSegment;
8576 size_type thirdSegment = BLOCK_LENGTH - secondSegment;
8578 std::memmove((
void *)destination->valuePtr(),
8580 firstSegment *
sizeof(VALUE_TYPE));
8582 *destination += firstSegment;
8583 *source += firstSegment;
8584 numElements -= firstSegment;
8586 for (; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) {
8588 std::memmove((
void *)destination->valuePtr(),
8590 secondSegment *
sizeof(VALUE_TYPE));
8592 *destination += secondSegment;
8593 *source += secondSegment;
8595 std::memmove((
void *)destination->valuePtr(),
8597 thirdSegment *
sizeof(VALUE_TYPE));
8599 *destination += thirdSegment;
8600 *source += thirdSegment;
8603 size_type remaining = numElements > secondSegment
8607 std::memmove((
void *)destination->valuePtr(),
8609 remaining *
sizeof(VALUE_TYPE));
8611 *destination += remaining;
8612 *source += remaining;
8613 numElements -= remaining;
8615 std::memmove((
void *)destination->valuePtr(),
8617 numElements *
sizeof(VALUE_TYPE));
8619 *destination += numElements;
8620 *source += numElements;
8623template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8624template <
class ALLOCATOR>
8626DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
8627 ::uninitializedFillNBack(Iterator *toEnd,
8629 size_type numElements,
8630 const VALUE_TYPE& value,
8631 ALLOCATOR allocator)
8633 if (fromEnd.remainingInBlock() > numElements) {
8638 fromEnd += numElements;
8643 size_type firstRemaining = fromEnd.remainingInBlock();
8650 numElements -= firstRemaining;
8651 fromEnd += firstRemaining;
8654 for ( ; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) {
8659 fromEnd.nextBlock();
8668 fromEnd += numElements;
8672template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8673template <
class ALLOCATOR>
8675DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
8676 ::valueInititalizeN(Iterator *toEnd,
8678 size_type numElements,
8679 ALLOCATOR allocator)
8681 if (fromEnd.remainingInBlock() > numElements) {
8685 fromEnd += numElements;
8690 size_type firstRemaining = fromEnd.remainingInBlock();
8696 numElements -= firstRemaining;
8697 fromEnd += firstRemaining;
8700 for ( ; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) {
8704 fromEnd.nextBlock();
8712 fromEnd += numElements;
8716template <
class VALUE_TYPE,
int BLOCK_LENGTH>
8717template <
class ALLOCATOR>
8719DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>
8720 ::uninitializedFillNFront(Iterator *toBegin,
8722 size_type numElements,
8723 const VALUE_TYPE& value,
8724 ALLOCATOR allocator)
8726 if (fromBegin.offsetInBlock() > numElements) {
8727 fromBegin -= numElements;
8733 *toBegin = fromBegin;
8737 size_type firstRemaining = fromBegin.offsetInBlock();
8739 fromBegin -= firstRemaining;
8740 numElements -= firstRemaining;
8747 *toBegin = fromBegin;
8749 for ( ; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) {
8750 fromBegin.previousBlock();
8755 *toBegin = fromBegin;
8758 fromBegin -= numElements;
8764 *toBegin = fromBegin;
8772template <
class VALUE_TYPE>
8773template <
class ALLOCATOR>
8781 ALLOCATOR allocator)
8783 size_type frontSize = first - fromBegin;
8784 size_type backSize = fromEnd - last;
8787 if (frontSize < backSize) {
8789 for (; 0 < frontSize; --frontSize) {
8799 for (; 0 < backSize; --backSize, ++first, ++last) {
8802 *toBegin = fromBegin;
8805 destruct(first, last, allocator);
8809template <
class VALUE_TYPE>
8810template <
class ALLOCATOR>
8813 ALLOCATOR allocator)
8821template <
class VALUE_TYPE>
8822template <
class ALLOCATOR>
8824DequePrimitives<VALUE_TYPE, 1>
8825 ::insertAndMoveToFront(Iterator *toBegin,
8828 size_type numElements,
8829 const VALUE_TYPE& value,
8830 ALLOCATOR allocator)
8832 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
8834 ALLOCATOR> ElementGuard;
8836 size_type frontSize = position - fromBegin;
8837 Iterator
begin = fromBegin;
8838 Iterator dest =
begin - numElements;
8854 ElementGuard guard(dest, dest, allocator);
8855 if (frontSize >= numElements) {
8856 for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++
begin) {
8862 for (frontSize -= numElements; 0 < frontSize;
8863 --frontSize, ++dest, ++
begin) {
8866 for (numDest = numElements; 0 < numDest; --numDest, ++dest) {
8870 for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++
begin) {
8876 for (numDest = numElements; frontSize < numDest; --numDest, ++dest) {
8882 for (; 0 < numDest; --numDest, ++dest) {
8887 *toBegin = fromBegin - numElements;
8890template <
class VALUE_TYPE>
8891template <
class FWD_ITER,
class ALLOCATOR>
8893DequePrimitives<VALUE_TYPE, 1>
8894 ::insertAndMoveToFront(Iterator *toBegin,
8899 size_type numElements,
8900 ALLOCATOR allocator)
8902 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
8904 ALLOCATOR> ElementGuard;
8906 size_type frontSize = position - fromBegin;
8907 Iterator
begin = fromBegin;
8908 Iterator dest =
begin - numElements;
8911 ElementGuard guard(dest, dest, allocator);
8912 if (frontSize >= numElements) {
8913 for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++
begin) {
8919 for (frontSize -= numElements; 0 < frontSize;
8920 --frontSize, ++dest, ++
begin) {
8923 for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++first) {
8927 for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++
begin) {
8933 for (numDest = numElements; frontSize < numDest;
8934 --numDest, ++dest, ++first) {
8940 for (; 0 < numDest; --numDest, ++dest, ++first) {
8945 *toBegin = fromBegin - numElements;
8948template <
class VALUE_TYPE>
8949template <
class ALLOCATOR>
8955 size_type numElements,
8956 const VALUE_TYPE& value,
8957 ALLOCATOR allocator)
8959 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
8961 ALLOCATOR> ElementGuard;
8963 size_type backSize = fromEnd - position;
8964 Iterator
end = fromEnd;
8965 Iterator dest =
end + numElements;
8981 ElementGuard guard(dest, dest, allocator);
8982 if (backSize >= numElements) {
8983 for (numDest = numElements; 0 < numDest; --numDest) {
8989 guard.moveBegin(-1);
8991 for (backSize -= numElements; 0 < backSize; --backSize) {
8996 for (numDest = numElements; 0 < numDest; --numDest, ++position) {
8997 *position = space.
object();
9000 for (numDest = backSize; 0 < numDest; --numDest) {
9006 guard.moveBegin(-1);
9008 for (numDest = numElements; backSize < numDest; --numDest) {
9013 guard.moveBegin(-1);
9015 for (; 0 < numDest; --numDest, ++position) {
9016 *position = space.
object();
9020 *toEnd = fromEnd + numElements;
9023template <
class VALUE_TYPE>
9024template <
class FWD_ITER,
class ALLOCATOR>
9031 size_type numElements,
9032 ALLOCATOR allocator)
9034 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
9036 ALLOCATOR> ElementGuard;
9038 size_type backSize = fromEnd - position;
9039 Iterator
end = fromEnd;
9040 Iterator dest =
end + numElements;
9043 ElementGuard guard(dest, dest, allocator);
9044 if (backSize >= numElements) {
9045 for (numDest = numElements; 0 < numDest; --numDest) {
9051 guard.moveBegin(-1);
9053 for (numDest = backSize; numElements < numDest; --numDest) {
9058 for (; 0 < numDest; ++first, ++position, --numDest) {
9062 for (numDest = backSize; 0 < numDest; --numDest) {
9068 guard.moveBegin(-1);
9070 for (numDest = backSize; 0 < numDest; --numDest, ++position, ++first) {
9073 ElementGuard guard2(position, position, allocator);
9074 for (numDest = numElements; backSize < numDest; ++first, ++position,
9077 position.valuePtr(),
9084 *toEnd = fromEnd + numElements;
9087template <
class VALUE_TYPE>
9088template <
class ALLOCATOR>
9094 size_type numElements,
9095 const VALUE_TYPE& value,
9096 ALLOCATOR allocator)
9103 IS_FUNDAMENTAL_OR_POINTER = IS_FUNDAMENTAL ||
9104 (IS_POINTER && !IS_FUNCTION_POINTER),
9108 VALUE = IS_FUNDAMENTAL_OR_POINTER || IS_BITWISECOPYABLE ?
9113 uninitializedFillNFront(toBegin,
9121template <
class VALUE_TYPE>
9122template <
class ALLOCATOR>
9127 size_type numElements,
9128 const VALUE_TYPE& value,
9129 ALLOCATOR allocator,
9132 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
9134 ALLOCATOR> ElementGuard;
9136 ElementGuard guard(fromBegin, fromBegin, allocator);
9137 for (; 0 < numElements; --numElements) {
9140 fromBegin.valuePtr(),
9142 guard.moveBegin(-1);
9145 *toBegin = fromBegin;
9148template <
class VALUE_TYPE>
9149template <
class ALLOCATOR>
9154 size_type numElements,
9155 const VALUE_TYPE& value,
9156 ALLOCATOR allocator,
9159 *toBegin = fromBegin;
9160 for ( ; 0 < numElements; --numElements) {
9166 *toBegin = fromBegin;
9170template <
class VALUE_TYPE>
9171template <
class ALLOCATOR>
9177 size_type numElements,
9178 const VALUE_TYPE& value,
9179 ALLOCATOR allocator)
9186 IS_FUNDAMENTAL_OR_POINTER = IS_FUNDAMENTAL ||
9187 (IS_POINTER && !IS_FUNCTION_POINTER),
9191 VALUE = IS_FUNDAMENTAL_OR_POINTER || IS_BITWISECOPYABLE ?
9196 uninitializedFillNBack(toEnd,
9204template <
class VALUE_TYPE>
9205template <
class ALLOCATOR>
9210 size_type numElements,
9211 const VALUE_TYPE& value,
9212 ALLOCATOR allocator,
9215 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
9217 ALLOCATOR> ElementGuard;
9219 ElementGuard guard(fromEnd, fromEnd, allocator);
9220 for (; 0 < numElements; --numElements) {
9231template <
class VALUE_TYPE>
9232template <
class ALLOCATOR>
9237 size_type numElements,
9238 const VALUE_TYPE& value,
9239 ALLOCATOR allocator,
9243 for ( ; 0 < numElements; --numElements) {
9253template <
class VALUE_TYPE>
9254template <
class ALLOCATOR>
9259 size_type numElements,
9260 ALLOCATOR allocator)
9267 IS_FUNDAMENTAL_OR_POINTER = IS_FUNDAMENTAL ||
9268 (IS_POINTER && !IS_FUNCTION_POINTER),
9272 VALUE = IS_FUNDAMENTAL_OR_POINTER || IS_BITWISECOPYABLE ?
9277 valueInititalizeN(toEnd,
9284template <
class VALUE_TYPE>
9285template <
class ALLOCATOR>
9290 size_type numElements,
9291 ALLOCATOR allocator,
9294 typedef DequePrimitives_DequeElementGuard<VALUE_TYPE,
9296 ALLOCATOR> ElementGuard;
9298 ElementGuard guard(fromEnd, fromEnd, allocator);
9299 for (; 0 < numElements; --numElements) {
9301 fromEnd.valuePtr());
9309template <
class VALUE_TYPE>
9310template <
class ALLOCATOR>
9315 size_type numElements,
9316 ALLOCATOR allocator,
9320 for ( ; 0 < numElements; --numElements) {
9334template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9336DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9337 ::DequePrimitives_DequeElementGuard(
const Iterator& begin,
9338 const Iterator& end,
9339 ALLOCATOR allocator)
9342, d_allocator(allocator)
9346template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9348DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9349 ::~DequePrimitives_DequeElementGuard()
9351 DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::destruct(d_begin,
9357template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9359typename DequePrimitives_DequeElementGuard
9360<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>::Iterator&
9361DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9362 ::moveBegin(std::ptrdiff_t offset)
9368template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9370typename DequePrimitives_DequeElementGuard
9371<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>::Iterator&
9372DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9373 ::moveEnd(std::ptrdiff_t offset)
9379template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9381void DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>::
9392template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9394DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9395 ::DequePrimitives_ExternalDequeElementGuard(Iterator *begin,
9397 ALLOCATOR allocator)
9400, d_allocator(allocator)
9404template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9406DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9407 ::~DequePrimitives_ExternalDequeElementGuard()
9409 if (d_begin_p != d_end_p) {
9410 DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::destruct(*d_begin_p,
9417template <
class VALUE_TYPE,
int BLOCK_LENGTH,
class ALLOCATOR>
9420DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>
9423 d_begin_p = d_end_p = 0;
9431template <
class VALUE_TYPE,
int BLOCK_LENGTH>
9433DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH>
9434 ::DequePrimitives_DequeMoveGuard(Iterator dest,
9438: d_destination_p(dest)
9445template <
class VALUE_TYPE,
int BLOCK_LENGTH>
9447DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH>
9448 ::~DequePrimitives_DequeMoveGuard()
9453 d_destination_p += d_size;
9454 d_source_p += d_size;
9455 DequePrimitives::moveBack(&d_destination_p, &d_source_p, d_size);
9459 d_destination_p -= d_size;
9460 d_source_p -= d_size;
9461 DequePrimitives::moveFront(&d_destination_p, &d_source_p, d_size);
9467template <
class VALUE_TYPE,
int BLOCK_LENGTH>
9469void DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH>::release()
9479template <
class VALUE_TYPE,
int BLOCK_LENGTH>
9481DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH>
9482 ::DequePrimitives_DequeEndpointProctor(Iterator *endpoint,
9484: d_endpoint_p(endpoint)
9485, d_position(position)
9489template <
class VALUE_TYPE,
int BLOCK_LENGTH>
9491DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH>
9492 ::~DequePrimitives_DequeEndpointProctor()
9494 if (0 != d_endpoint_p) {
9495 *d_endpoint_p = d_position;
9500template <
class VALUE_TYPE,
int BLOCK_LENGTH>
9502void DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH>::release()
9509#ifndef BDE_OPENSOURCE_PUBLICATION
9514#ifdef bslalg_DequePrimitives
9515#undef bslalg_DequePrimitives
9518#define bslalg_DequePrimitives bslalg::DequePrimitives
9524# error Not valid except when included from bslalg_dequeprimitives.h
Iterator & moveEnd(std::ptrdiff_t offset=1)
Definition bslalg_dequeprimitives.h:3399
Iterator & moveBegin(std::ptrdiff_t offset=-1)
Definition bslalg_dequeprimitives.h:3388
void release()
Definition bslalg_dequeprimitives.h:3408
~DequePrimitives_DequeElementGuard()
Definition bslalg_dequeprimitives.h:3375
DequeIterator< VALUE_TYPE, BLOCK_LENGTH > Iterator
Definition bslalg_dequeprimitives.h:897
void release()
Definition bslalg_dequeprimitives.h:3528
~DequePrimitives_DequeEndpointProctor()
Definition bslalg_dequeprimitives.h:3518
DequeIterator< VALUE_TYPE, BLOCK_LENGTH > Iterator
Definition bslalg_dequeprimitives.h:1073
void release()
Set the size of the range guarded by this object to be zero.
Definition bslalg_dequeprimitives.h:3495
~DequePrimitives_DequeMoveGuard()
Definition bslalg_dequeprimitives.h:3474
bslalg::DequePrimitives< VALUE_TYPE, BLOCK_LENGTH > DequePrimitives
Definition bslalg_dequeprimitives.h:1020
DequeIterator< VALUE_TYPE, BLOCK_LENGTH > Iterator
Definition bslalg_dequeprimitives.h:1019
~DequePrimitives_ExternalDequeElementGuard()
Definition bslalg_dequeprimitives.h:3433
void release()
Definition bslalg_dequeprimitives.h:3447
DequeIterator< VALUE_TYPE, BLOCK_LENGTH > Iterator
Definition bslalg_dequeprimitives.h:962
Definition bslma_destructorproctor.h:259
Definition bslmf_movableref.h:751
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1762
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2012
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2018
#define BSLS_UTIL_ADDRESSOF(OBJ)
Definition bsls_util.h:289
bsl::size_t size(const TYPE &array)
Return the number of elements in the specified array.
deque< VALUE_TYPE, ALLOCATOR >::size_type erase(deque< VALUE_TYPE, ALLOCATOR > &deq, const BDE_OTHER_TYPE &value)
Definition bslstl_deque.h:4126
T::iterator begin(T &container)
Definition bslstl_iterator.h:1495
T::iterator end(T &container)
Definition bslstl_iterator.h:1523
Definition bdlc_flathashmap.h:1805
static void construct(ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr, Args &&... arguments)
Definition bslma_allocatortraits.h:1472
static void destroy(ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr)
Definition bslma_allocatortraits.h:1494
Definition bslmf_integralconstant.h:244
static void defaultConstruct(typename bsl::allocator_traits< ALLOCATOR >::pointer begin, size_type numElements, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2064
static void uninitializedFillN(typename bsl::allocator_traits< ALLOCATOR >::pointer begin, size_type numElements, const typename bsl::allocator_traits< ALLOCATOR >::value_type &value, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:1905
Definition bslalg_dequeprimitives.h:243
static void moveBack(Iterator *destination, Iterator *source, size_type numElements)
Definition bslalg_dequeprimitives.h:2399
static void insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE &value, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:1281
static void insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE &value, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:1694
static void emplaceAndMoveToFrontDispatch(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bsl::integral_constant< int, BITWISE_COPYABLE_TRAITS >, Args &&... arguments)
Definition bslalg_dequeprimitives.h:2272
static void uninitializedFillNFront(Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE &value, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:2746
static void uninitializedFillNBack(Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE &value, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:2653
static void moveInsertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef< VALUE_TYPE > value, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:1944
static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, Args &&... arguments)
Definition bslalg_dequeprimitives.h:2084
static void emplaceAndMoveToBackDispatch(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bsl::integral_constant< int, BITWISE_COPYABLE_TRAITS >, Args &&... arguments)
Definition bslalg_dequeprimitives.h:2112
std::size_t size_type
Definition bslalg_dequeprimitives.h:246
static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, Args &&... arguments)
Definition bslalg_dequeprimitives.h:2244
DequeIterator< VALUE_TYPE, BLOCK_LENGTH > Iterator
Definition bslalg_dequeprimitives.h:247
static void valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:2702
static void moveInsertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef< VALUE_TYPE > value, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:1550
static Iterator erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:1170
static void destruct(Iterator begin, Iterator end, ALLOCATOR allocator)
Definition bslalg_dequeprimitives.h:1122
static void moveFront(Iterator *destination, Iterator *source, size_type numElements)
Definition bslalg_dequeprimitives.h:2525
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1243
static Allocator * allocator(Allocator *basicAllocator=0)
Definition bslma_default.h:897
Definition bslmf_isbitwisecopyable.h:298
Definition bslmf_isbitwisemoveable.h:718
Definition bslmf_functionpointertraits.h:153
Definition bslmf_isfundamental.h:303
Definition bslmf_ispointer.h:225
Definition bslmf_movableref.h:791
Definition bsls_objectbuffer.h:276
TYPE & object()
Definition bsls_objectbuffer.h:351