8#ifndef INCLUDED_BSLALG_ARRAYPRIMITIVES
9#define INCLUDED_BSLALG_ARRAYPRIMITIVES
335#include <bslscm_version.h>
382#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
386#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
392# define COMPILING_BSLALG_ARRAYPRIMITIVES_H
394# undef COMPILING_BSLALG_ARRAYPRIMITIVES_H
399#if defined(BSLS_PLATFORM_CMP_IBM)
400# define BSLALG_ARRAYPRIMITIVES_CANNOT_REMOVE_POINTER_FROM_FUNCTION_POINTER 1
403# define BSLALG_ARRAYPRIMITIVES_NON_ZERO_NULL_VALUE_FOR_MEMBER_POINTERS 1
411struct ArrayPrimitives_Imp;
444 template <
class ALLOCATOR,
class FWD_ITER,
class SENTINEL>
450 ALLOCATOR allocator);
451 template <
class ALLOCATOR,
class SOURCE_TYPE>
455 SOURCE_TYPE *fromBegin,
456 SOURCE_TYPE *fromEnd,
457 ALLOCATOR allocator);
470 template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL>
475 template <
class TARGET_TYPE,
class SOURCE_TYPE>
477 SOURCE_TYPE *fromBegin,
478 SOURCE_TYPE *fromEnd,
492 template <
class ALLOCATOR>
498 ALLOCATOR allocator);
511 template <
class TARGET_TYPE>
513 TARGET_TYPE *fromBegin,
514 TARGET_TYPE *fromEnd,
526 template <
class ALLOCATOR>
530 ALLOCATOR allocator);
544 template <
class TARGET_TYPE>
566 template <
class ALLOCATOR>
571 ALLOCATOR allocator);
585 template <
class TARGET_TYPE>
587 TARGET_TYPE *fromBegin,
588 TARGET_TYPE *fromEnd,
591#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
617 template <
class ALLOCATOR,
class... ARGS>
625 ARGS&&... arguments);
652 template <
class ALLOCATOR>
660 ALLOCATOR allocator);
685 template <
class TARGET_TYPE>
687 TARGET_TYPE **fromEndPtr,
688 TARGET_TYPE *fromBegin,
689 TARGET_TYPE *position,
690 TARGET_TYPE *fromEnd,
715 template <
class ALLOCATOR>
724 ALLOCATOR allocator);
743 template <
class TARGET_TYPE>
745 TARGET_TYPE **fromEndPtr,
746 TARGET_TYPE *fromBegin,
747 TARGET_TYPE *position,
748 TARGET_TYPE *fromEnd,
749 const TARGET_TYPE& value,
778 template <
class ALLOCATOR,
class FWD_ITER,
class SENTINEL>
788 ALLOCATOR allocator);
810 template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL>
812 TARGET_TYPE **fromEndPtr,
813 TARGET_TYPE *fromBegin,
814 TARGET_TYPE *position,
815 TARGET_TYPE *fromEnd,
841 template <
class ALLOCATOR>
852 ALLOCATOR allocator);
876 template <
class TARGET_TYPE>
878 TARGET_TYPE **fromEndPtr,
879 TARGET_TYPE **lastPtr,
880 TARGET_TYPE *fromBegin,
881 TARGET_TYPE *position,
882 TARGET_TYPE *fromEnd,
888#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
906 template <
class ALLOCATOR,
class... ARGS>
911 ARGS&&... arguments);
929 template <
class TARGET_TYPE,
class... ARGS>
930 static void emplace(TARGET_TYPE *toBegin,
949 template <
class ALLOCATOR>
954 ALLOCATOR allocator);
966 template <
class TARGET_TYPE>
967 static void erase(TARGET_TYPE *first,
983 template <
class ALLOCATOR>
989 ALLOCATOR allocator);
1002 template <
class TARGET_TYPE>
1003 static void insert(TARGET_TYPE *toBegin,
1019 template <
class ALLOCATOR>
1026 ALLOCATOR allocator);
1040 template <
class TARGET_TYPE>
1041 static void insert(TARGET_TYPE *toBegin,
1043 const TARGET_TYPE& value,
1064 template <
class ALLOCATOR,
class FWD_ITER,
class SENTINEL>
1071 ALLOCATOR allocator);
1072 template <
class ALLOCATOR,
class SOURCE_TYPE>
1076 SOURCE_TYPE *fromBegin,
1077 SOURCE_TYPE *fromEnd,
1079 ALLOCATOR allocator);
1099 template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL>
1100 static void insert(TARGET_TYPE *toBegin,
1106 template <
class TARGET_TYPE,
class SOURCE_TYPE>
1107 static void insert(TARGET_TYPE *toBegin,
1109 SOURCE_TYPE *fromBegin,
1110 SOURCE_TYPE *fromEnd,
1135 template <
class ALLOCATOR>
1143 ALLOCATOR allocator);
1165 template <
class TARGET_TYPE>
1168 TARGET_TYPE **fromEndPtr,
1169 TARGET_TYPE *fromBegin,
1170 TARGET_TYPE *fromEnd,
1185 template <
class TARGET_TYPE>
1186 static void rotate(TARGET_TYPE *first,
1187 TARGET_TYPE *middle,
1201 template <
class ALLOCATOR>
1206 ALLOCATOR allocator);
1223 template <
class TARGET_TYPE>
1226 const TARGET_TYPE& value,
1253 template <
class TARGET_TYPE>
1254 static void assign(TARGET_TYPE *srcStart,
1255 TARGET_TYPE *srcEnd,
1256 TARGET_TYPE& value);
1269 template <
class TARGET_TYPE>
1270 static void reverseAssign(TARGET_TYPE *dest,
1271 TARGET_TYPE *srcStart,
1272 TARGET_TYPE *srcEnd);
1339 unsigned char *begin,
1340 unsigned char value,
1367 unsigned short *begin,
1368 unsigned short value,
1381 unsigned int *begin,
1395 unsigned long *begin,
1396 unsigned long value,
1451 volatile void **begin,
1452 volatile void *value,
1458 const volatile void **begin,
1459 const volatile void *value,
1464 template <
class TARGET_TYPE>
1466 TARGET_TYPE **begin,
1472 template <
class TARGET_TYPE>
1474 const TARGET_TYPE **begin,
1475 const TARGET_TYPE *value,
1480 template <
class TARGET_TYPE>
1482 volatile TARGET_TYPE **begin,
1483 volatile TARGET_TYPE *value,
1488 template <
class TARGET_TYPE>
1490 const volatile TARGET_TYPE **begin,
1491 const volatile TARGET_TYPE *value,
1496 template <
class TARGET_TYPE,
class ALLOCATOR>
1499 const TARGET_TYPE& value,
1501 ALLOCATOR *allocator,
1503 template <
class TARGET_TYPE,
class ALLOCATOR>
1506 const TARGET_TYPE& value,
1508 ALLOCATOR *allocator,
1522 template <
class TARGET_TYPE,
1527 TARGET_TYPE *toBegin,
1530 ALLOCATOR allocator,
1532 template <
class TARGET_TYPE,
class ALLOCATOR>
1534 TARGET_TYPE *toBegin,
1535 const TARGET_TYPE *fromBegin,
1536 const TARGET_TYPE *fromEnd,
1537 ALLOCATOR allocator,
1539 template <
class TARGET_TYPE,
1544 TARGET_TYPE *toBegin,
1547 ALLOCATOR allocator,
1549 template <
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
1554 ALLOCATOR allocator,
1556 template <
class TARGET_TYPE,
1561 TARGET_TYPE *toBegin,
1564 ALLOCATOR allocator,
1580 template <
class TARGET_TYPE,
class ALLOCATOR>
1582 TARGET_TYPE *toBegin,
1583 TARGET_TYPE *fromBegin,
1584 TARGET_TYPE *fromEnd,
1585 ALLOCATOR allocator,
1587 template <
class TARGET_TYPE,
class ALLOCATOR>
1589 TARGET_TYPE *toBegin,
1590 TARGET_TYPE *fromBegin,
1591 TARGET_TYPE *fromEnd,
1592 ALLOCATOR allocator,
1611 template <
class TARGET_TYPE,
class ALLOCATOR>
1613 TARGET_TYPE *toBegin,
1614 TARGET_TYPE *fromBegin,
1615 TARGET_TYPE *fromEnd,
1616 ALLOCATOR allocator,
1626 template <
class TARGET_TYPE,
class ALLOCATOR>
1630 ALLOCATOR allocator,
1632 template <
class TARGET_TYPE,
class ALLOCATOR>
1636 ALLOCATOR allocator,
1638 template <
class TARGET_TYPE,
class ALLOCATOR>
1642 ALLOCATOR allocator,
1652 template <
class TARGET_TYPE,
class ALLOCATOR>
1654 TARGET_TYPE *toBegin,
1655 TARGET_TYPE *fromBegin,
1656 TARGET_TYPE *fromEnd,
1657 ALLOCATOR allocator,
1659 template <
class TARGET_TYPE,
class ALLOCATOR>
1661 TARGET_TYPE *toBegin,
1662 TARGET_TYPE *fromBegin,
1663 TARGET_TYPE *fromEnd,
1664 ALLOCATOR allocator,
1667#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1669 template <
class TARGET_TYPE,
class ALLOCATOR,
class... ARGS>
1671 TARGET_TYPE *toBegin,
1673 ALLOCATOR allocator,
1676 template <
class TARGET_TYPE,
class ALLOCATOR,
class... ARGS>
1678 TARGET_TYPE *toBegin,
1680 ALLOCATOR allocator,
1683 template <
class TARGET_TYPE,
class ALLOCATOR,
class... ARGS>
1685 TARGET_TYPE *toBegin,
1687 ALLOCATOR allocator,
1699 template <
class TARGET_TYPE,
class ALLOCATOR>
1702 TARGET_TYPE *middle,
1704 ALLOCATOR allocator,
1706 template <
class TARGET_TYPE,
class ALLOCATOR>
1709 TARGET_TYPE *middle,
1711 ALLOCATOR allocator,
1722 template <
class TARGET_TYPE,
class ALLOCATOR>
1724 TARGET_TYPE *toBegin,
1726 const TARGET_TYPE& value,
1728 ALLOCATOR allocator,
1730 template <
class TARGET_TYPE,
class ALLOCATOR>
1732 TARGET_TYPE *toBegin,
1734 const TARGET_TYPE& value,
1736 ALLOCATOR allocator,
1738 template <
class TARGET_TYPE,
class ALLOCATOR>
1740 TARGET_TYPE *toBegin,
1742 const TARGET_TYPE& value,
1744 ALLOCATOR allocator,
1756 template <
class TARGET_TYPE,
1761 TARGET_TYPE *toBegin,
1766 ALLOCATOR allocator,
1768 template <
class TARGET_TYPE,
class ALLOCATOR>
1770 TARGET_TYPE *toBegin,
1772 const TARGET_TYPE *fromBegin,
1773 const TARGET_TYPE *fromEnd,
1775 ALLOCATOR allocator,
1777 template <
class TARGET_TYPE,
1782 TARGET_TYPE *toBegin,
1787 ALLOCATOR allocator,
1789 template <
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
1796 ALLOCATOR allocator,
1798 template <
class TARGET_TYPE,
1803 TARGET_TYPE *toBegin,
1808 ALLOCATOR allocator,
1815 template <
class TARGET_TYPE,
class ALLOCATOR>
1817 TARGET_TYPE *toBegin,
1819 TARGET_TYPE **lastPtr,
1823 ALLOCATOR allocator,
1825 template <
class TARGET_TYPE,
class ALLOCATOR>
1827 TARGET_TYPE *toBegin,
1829 TARGET_TYPE **lastPtr,
1833 ALLOCATOR allocator,
1843 template <
class TARGET_TYPE>
1846 TARGET_TYPE *middle,
1849 template <
class TARGET_TYPE>
1852 TARGET_TYPE *middle,
1862 template <
class ALLOCATOR>
1868 ALLOCATOR allocator,
1870 template <
class ALLOCATOR>
1876 ALLOCATOR allocator,
1878 template <
class ALLOCATOR>
1884 ALLOCATOR allocator,
1934 template <
class FORWARD_ITERATOR,
class SENTINEL>
1935 static bool isInvalidRange(FORWARD_ITERATOR begin, SENTINEL end);
1936 template <
class TARGET_TYPE>
1937 static bool isInvalidRange(TARGET_TYPE *begin, TARGET_TYPE *end);
1951template <
class FROM_TYPE,
class TO_TYPE>
1955 typename bsl::remove_const<FROM_TYPE>::type,
1956 typename bsl::remove_const<TO_TYPE >::type>
1958 && bslmf::IsBitwiseCopyable<
1959 typename bsl::remove_const<TO_TYPE >::type>
1968template <
class ALLOCATOR>
1974 ALLOCATOR allocator)
1992 k_IS_FUNDAMENTAL_OR_POINTER = k_IS_FUNDAMENTAL ||
1993 (k_IS_POINTER && !k_IS_FUNCTION_POINTER),
2010template <
class TARGET_TYPE>
2014 const TARGET_TYPE& value,
2017 uninitializedFillN<bsl::allocator<TARGET_TYPE> >(begin,
2023template <
class ALLOCATOR,
class FWD_ITER,
class SENTINEL>
2028 ALLOCATOR allocator)
2049 typedef typename FWD_ITER::value_type FwdTarget;
2060 k_VALUE = k_ITER_TO_FUNC_PTRS && k_TARGET_IS_VOID_PTR
2072template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL>
2079 copyConstruct<bsl::allocator<TARGET_TYPE> >(toBegin,
2085template <
class ALLOCATOR,
class SOURCE_TYPE>
2089 SOURCE_TYPE *fromBegin,
2090 SOURCE_TYPE *fromEnd,
2091 ALLOCATOR allocator)
2100 k_IS_BITWISECOPYABLE =
2114template <
class TARGET_TYPE,
class SOURCE_TYPE>
2117 SOURCE_TYPE *fromBegin,
2118 SOURCE_TYPE *fromEnd,
2121 copyConstruct<bsl::allocator<TARGET_TYPE> >(toBegin,
2127template <
class ALLOCATOR>
2132 ALLOCATOR allocator)
2143#if !defined(BSLALG_ARRAYPRIMITIVES_NON_ZERO_NULL_VALUE_FOR_MEMBER_POINTERS)
2159template <
class TARGET_TYPE>
2165 defaultConstruct<bsl::allocator<TARGET_TYPE> >(begin,
2170template <
class ALLOCATOR>
2176 ALLOCATOR allocator)
2196template <
class TARGET_TYPE>
2199 TARGET_TYPE *fromBegin,
2200 TARGET_TYPE *fromEnd,
2203 destructiveMove<bsl::allocator<TARGET_TYPE> >(toBegin,
2209#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2210template <
class ALLOCATOR,
class... ARGS>
2217 ALLOCATOR allocator,
2218 ARGS&&... arguments)
2232 *fromEndPtr = fromEnd;
2240 TargetType *toPositionBegin = toBegin + (position - fromBegin);
2247 TargetType *toPositionEnd = toPositionBegin + 1;
2263 *fromEndPtr = position;
2264 guard.
moveEnd(fromEnd - position);
2276 *fromEndPtr = fromBegin;
2281template <
class ALLOCATOR>
2289 ALLOCATOR allocator)
2303 *fromEndPtr = fromEnd;
2311 TargetType *toPositionBegin = toBegin + (position - fromBegin);
2314 TargetType *toPositionEnd = toPositionBegin + numElements;
2330 *fromEndPtr = position;
2331 guard.
moveEnd(fromEnd - position);
2343 *fromEndPtr = fromBegin;
2347template <
class TARGET_TYPE>
2350 TARGET_TYPE *toBegin,
2351 TARGET_TYPE **fromEndPtr,
2352 TARGET_TYPE *fromBegin,
2353 TARGET_TYPE *position,
2354 TARGET_TYPE *fromEnd,
2358 destructiveMoveAndInsert<bsl::allocator<TARGET_TYPE> >(toBegin,
2367template <
class ALLOCATOR>
2376 ALLOCATOR allocator)
2390 *fromEndPtr = fromEnd;
2401 TargetType *toPositionBegin = toBegin + (position - fromBegin);
2404 TargetType *toPositionEnd = toPositionBegin + numElements;
2420 *fromEndPtr = position;
2421 guard.
moveEnd(fromEnd - position);
2433 *fromEndPtr = fromBegin;
2437template <
class TARGET_TYPE>
2439 TARGET_TYPE *toBegin,
2440 TARGET_TYPE **fromEndPtr,
2441 TARGET_TYPE *fromBegin,
2442 TARGET_TYPE *position,
2443 TARGET_TYPE *fromEnd,
2444 const TARGET_TYPE& value,
2448 destructiveMoveAndInsert<bsl::allocator<TARGET_TYPE> >(toBegin,
2458template <
class ALLOCATOR,
class FWD_ITER,
class SENTINEL>
2468 ALLOCATOR allocator)
2482 *fromEndPtr = fromEnd;
2492 TargetType *toPositionBegin = toBegin + (position - fromBegin);
2495 TargetType *toPositionEnd = toPositionBegin + numElements;
2511 *fromEndPtr = position;
2512 guard.
moveEnd(fromEnd - position);
2524 *fromEndPtr = fromBegin;
2528template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL>
2531 TARGET_TYPE *toBegin,
2532 TARGET_TYPE **fromEndPtr,
2533 TARGET_TYPE *fromBegin,
2534 TARGET_TYPE *position,
2535 TARGET_TYPE *fromEnd,
2541 destructiveMoveAndInsert<bsl::allocator<TARGET_TYPE> >(toBegin,
2552template <
class ALLOCATOR>
2563 ALLOCATOR allocator)
2578 *fromEndPtr = fromEnd;
2585 TargetType *toPositionBegin = toBegin + (position - fromBegin);
2586 TargetType *toPositionEnd = toPositionBegin + numElements;
2593 *fromEndPtr = position;
2596 guard(toPositionEnd,
2597 toPositionEnd + (fromEnd - position),
2623 *fromEndPtr = fromBegin;
2627template <
class TARGET_TYPE>
2630 TARGET_TYPE *toBegin,
2631 TARGET_TYPE **fromEndPtr,
2632 TARGET_TYPE **lastPtr,
2633 TARGET_TYPE *fromBegin,
2634 TARGET_TYPE *position,
2635 TARGET_TYPE *fromEnd,
2641 destructiveMoveAndMoveInsert<bsl::allocator<TARGET_TYPE> >(toBegin,
2653#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2654template <
class ALLOCATOR,
class... ARGS>
2659 ALLOCATOR allocator,
2684template <
class TARGET_TYPE,
class... ARGS>
2691 emplace<bsl::allocator<TARGET_TYPE> >(
2700template <
class ALLOCATOR>
2706 ALLOCATOR allocator)
2713 if (first == middle) {
2730template <
class TARGET_TYPE>
2733 TARGET_TYPE *middle,
2737 erase<bsl::allocator<TARGET_TYPE> >(first,
2743template <
class ALLOCATOR>
2750 ALLOCATOR allocator)
2757 if (toBegin != toEnd) {
2783template <
class TARGET_TYPE>
2790 insert<bsl::allocator<TARGET_TYPE> >(toBegin,
2796template <
class ALLOCATOR>
2802 ALLOCATOR allocator)
2809 if (0 == numElements) {
2828template <
class TARGET_TYPE>
2832 const TARGET_TYPE& value,
2836 insert<bsl::allocator<TARGET_TYPE> >(toBegin,
2843template <
class ALLOCATOR,
class FWD_ITER,
class SENTINEL>
2850 ALLOCATOR allocator)
2852 if (0 == numElements) {
2874 typedef typename FWD_ITER::value_type FwdTarget;
2885 k_VALUE = k_ITER_TO_FUNC_PTRS && k_TARGET_IS_VOID_PTR
2898template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL>
2907 insert<bsl::allocator<TARGET_TYPE> >(toBegin,
2915template <
class ALLOCATOR,
class SOURCE_TYPE>
2919 SOURCE_TYPE *fromBegin,
2920 SOURCE_TYPE *fromEnd,
2922 ALLOCATOR allocator)
2924 if (0 == numElements) {
2934 k_IS_BITWISECOPYABLE =
2950template <
class TARGET_TYPE,
class SOURCE_TYPE>
2954 SOURCE_TYPE *fromBegin,
2955 SOURCE_TYPE *fromEnd,
2959 insert<bsl::allocator<TARGET_TYPE> >(toBegin,
2967template <
class ALLOCATOR>
2973 ALLOCATOR allocator)
2992template <
class TARGET_TYPE>
2995 TARGET_TYPE *fromBegin,
2996 TARGET_TYPE *fromEnd,
2999 moveConstruct<bsl::allocator<TARGET_TYPE> >(toBegin,
3005template <
class ALLOCATOR>
3014 ALLOCATOR allocator)
3033template <
class TARGET_TYPE>
3037 TARGET_TYPE **fromEndPtr,
3038 TARGET_TYPE *fromBegin,
3039 TARGET_TYPE *fromEnd,
3043 moveInsert<bsl::allocator<TARGET_TYPE> >(toBegin,
3052template <
class TARGET_TYPE>
3055 TARGET_TYPE *middle,
3079template <
class TARGET_TYPE>
3081void ArrayPrimitives_Imp::assign(TARGET_TYPE *srcStart,
3082 TARGET_TYPE *srcEnd,
3085 for ( ; srcStart != srcEnd; ++srcStart) {
3090template <
class FORWARD_ITERATOR,
class SENTINEL>
3104template <
class TARGET_TYPE>
3109 return !begin != !end || begin > end;
3112template <
class TARGET_TYPE>
3114void ArrayPrimitives_Imp::reverseAssign(TARGET_TYPE *dest,
3115 TARGET_TYPE *srcStart,
3116 TARGET_TYPE *srcEnd)
3118 TARGET_TYPE *destEnd = srcEnd - srcStart + dest;
3119 while (srcStart != srcEnd) {
3120 *--destEnd = *--srcEnd;
3140 std::memset(
reinterpret_cast<char *
>(begin),
3141 static_cast<char>(value),
3158 std::memset(begin, value, numElements);
3164 unsigned char *begin,
3165 unsigned char value,
3174 std::memset(begin, value, numElements);
3190 std::memset(begin, value, numElements);
3206 std::wmemset(begin, value, numElements);
3212 unsigned short *begin,
3213 unsigned short value,
3222 reinterpret_cast<short *
>(begin),
3223 static_cast<short>(value),
3231 unsigned int *begin,
3241 reinterpret_cast<int *
>(begin),
3242 static_cast<int>(value),
3259#if defined(BSLS_PLATFORM_CPU_64_BIT) && !defined(BSLS_PLATFORM_OS_WINDOWS)
3265 reinterpret_cast<int *
>(begin),
3266 static_cast<int>(value),
3275 unsigned long *begin,
3276 unsigned long value,
3284#if defined(BSLS_PLATFORM_CPU_64_BIT) && !defined(BSLS_PLATFORM_OS_WINDOWS)
3293 reinterpret_cast<int *
>(begin),
3294 static_cast<int>(value),
3320template <
class TARGET_TYPE>
3323 TARGET_TYPE **begin,
3340 reinterpret_cast<void **
>(begin),
3341 static_cast<void *
>(value),
3347template <
class TARGET_TYPE>
3350 const TARGET_TYPE **begin,
3351 const TARGET_TYPE *value,
3363 reinterpret_cast<const void **
>(begin),
3364 static_cast<const void *
>(value),
3370template <
class TARGET_TYPE>
3373 volatile TARGET_TYPE **begin,
3374 volatile TARGET_TYPE *value,
3386 reinterpret_cast<volatile void **
>(begin),
3387 static_cast<volatile void *
>(value),
3393template <
class TARGET_TYPE>
3396 const volatile TARGET_TYPE **begin,
3397 const volatile TARGET_TYPE *value,
3409 reinterpret_cast<const volatile void **
>(begin),
3410 static_cast<const volatile void *
>(value),
3416template <
class TARGET_TYPE,
class ALLOCATOR>
3419 const TARGET_TYPE& value,
3427 if (0 == numElements) {
3431 const char *valueBuffer =
3434 std::memcpy((
void *)begin, valueBuffer,
sizeof(TARGET_TYPE));
3436 sizeof(TARGET_TYPE),
3437 sizeof(TARGET_TYPE) * numElements);
3440template <
class TARGET_TYPE,
class ALLOCATOR>
3443 const TARGET_TYPE& value,
3445 ALLOCATOR *allocator,
3452 if (0 == numElements) {
3459 TARGET_TYPE *end = begin + numElements;
3463 }
while (begin != end);
3469template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
3472 TARGET_TYPE *toBegin,
3475 ALLOCATOR allocator,
3490#if defined(BSLALG_ARRAYPRIMITIVES_CANNOT_REMOVE_POINTER_FROM_FUNCTION_POINTER)
3493 (
void *
const *)fromBegin,
3494 (
void *
const *)fromEnd,
3499 reinterpret_cast<void * *
>(
const_cast<NcPtrType **
>(toBegin)),
3500 reinterpret_cast<void *
const *
>(
const_cast<NcIter *
const *
>(fromBegin)),
3501 reinterpret_cast<void *
const *
>(
const_cast<NcIter *
const *
>(fromEnd)),
3507template <
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
3523 while (fromBegin != fromEnd) {
3527 *toBegin =
reinterpret_cast<void *
>(*fromBegin);
3533template <
class TARGET_TYPE,
class ALLOCATOR>
3536 TARGET_TYPE *toBegin,
3537 const TARGET_TYPE *fromBegin,
3538 const TARGET_TYPE *fromEnd,
3546 const size_type numBytes =
reinterpret_cast<const char*
>(fromEnd)
3547 -
reinterpret_cast<const char*
>(fromBegin);
3549 std::memcpy((
void *)toBegin, fromBegin, numBytes);
3553template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
3555 TARGET_TYPE *toBegin,
3558 ALLOCATOR allocator,
3568 while (fromBegin != fromEnd) {
3582template <
class TARGET_TYPE,
class ALLOCATOR>
3585 TARGET_TYPE *toBegin,
3586 TARGET_TYPE *fromBegin,
3587 TARGET_TYPE *fromEnd,
3595 const size_type numBytes =
reinterpret_cast<const char*
>(fromEnd)
3596 -
reinterpret_cast<const char*
>(fromBegin);
3598 std::memcpy((
void *)toBegin, fromBegin, numBytes);
3602template <
class TARGET_TYPE,
class ALLOCATOR>
3604 TARGET_TYPE *toBegin,
3605 TARGET_TYPE *fromBegin,
3606 TARGET_TYPE *fromEnd,
3607 ALLOCATOR allocator,
3617 while (fromBegin != fromEnd) {
3628template <
class TARGET_TYPE,
class ALLOCATOR>
3630 TARGET_TYPE *toBegin,
3631 TARGET_TYPE *fromBegin,
3632 TARGET_TYPE *fromEnd,
3633 ALLOCATOR allocator,
3643 while (fromBegin != fromEnd) {
3657template <
class TARGET_TYPE,
class ALLOCATOR>
3669 std::memset(
static_cast<void *
>(begin),
3671 sizeof(TARGET_TYPE) * numElements);
3675template <
class TARGET_TYPE,
class ALLOCATOR>
3680 ALLOCATOR allocator,
3686 if (0 < numElements) {
3689 sizeof(TARGET_TYPE),
3690 numElements *
sizeof(TARGET_TYPE));
3694template <
class TARGET_TYPE,
class ALLOCATOR>
3698 ALLOCATOR allocator,
3706 const TARGET_TYPE *end = begin + numElements;
3707 while (begin != end) {
3716template <
class TARGET_TYPE,
class ALLOCATOR>
3719 TARGET_TYPE *toBegin,
3720 TARGET_TYPE *fromBegin,
3721 TARGET_TYPE *fromEnd,
3729 const size_type numBytes =
reinterpret_cast<const char*
>(fromEnd)
3730 -
reinterpret_cast<const char*
>(fromBegin);
3732 std::memcpy((
void *)toBegin, fromBegin, numBytes);
3736template <
class TARGET_TYPE,
class ALLOCATOR>
3739 TARGET_TYPE *toBegin,
3740 TARGET_TYPE *fromBegin,
3741 TARGET_TYPE *fromEnd,
3742 ALLOCATOR allocator,
3759#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
3760template <
class TARGET_TYPE,
class ALLOCATOR,
class... ARGS>
3763 TARGET_TYPE *toBegin,
3765 ALLOCATOR allocator,
3782template <
class TARGET_TYPE,
class ALLOCATOR,
class... ARGS>
3784 TARGET_TYPE *toBegin,
3786 ALLOCATOR allocator,
3808 size_type numGuarded = tailLen < numElements ? tailLen : numElements;
3814 TARGET_TYPE *destBegin = toBegin + numElements;
3816 std::memmove((
void *)destBegin,
3818 tailLen *
sizeof(TARGET_TYPE));
3825 TARGET_TYPE *destEnd = toEnd + numElements;
3828 destEnd - numGuarded,
3829 destEnd - numGuarded,
3843 if (tailLen < numElements) {
3857 while (toEnd != destBegin) {
3868template <
class TARGET_TYPE,
class ALLOCATOR,
class... ARGS>
3870 TARGET_TYPE *toBegin,
3872 ALLOCATOR allocator,
3888 if (toEnd > toBegin) {
3919 TARGET_TYPE *destEnd = toEnd;
3920 TARGET_TYPE *srcEnd = toEnd - 1;
3921 while (toBegin != srcEnd) {
3946template <
class TARGET_TYPE,
class ALLOCATOR>
3949 TARGET_TYPE *middle,
3951 ALLOCATOR allocator,
3972 size_type numBytes =
reinterpret_cast<const char *
>(last)
3973 -
reinterpret_cast<const char *
>(middle);
3975 std::memmove((
void *)first, middle, numBytes);
3979template <
class TARGET_TYPE,
class ALLOCATOR>
3982 TARGET_TYPE *middle,
3984 ALLOCATOR allocator,
4001 while (middle != last) {
4014template <
class TARGET_TYPE,
class ALLOCATOR>
4017 TARGET_TYPE *toBegin,
4019 const TARGET_TYPE& value,
4021 ALLOCATOR allocator,
4041 if (toBegin <= tempValuePtr && tempValuePtr < toEnd ) {
4044 tempValuePtr += numElements;
4051 const size_type numBytes =
reinterpret_cast<const char*
>(toEnd)
4052 -
reinterpret_cast<const char*
>(toBegin);
4054 std::memmove((
void *)(toBegin + numElements), toBegin, numBytes);
4074 numElements *
sizeof value);
4077template <
class TARGET_TYPE,
class ALLOCATOR>
4079 TARGET_TYPE *toBegin,
4081 const TARGET_TYPE& value,
4083 ALLOCATOR allocator,
4100 if (toBegin <= tempValuePtr && tempValuePtr < toEnd + numElements) {
4103 tempValuePtr += numElements;
4107 size_type numGuarded = tailLen < numElements ? tailLen : numElements;
4113 TARGET_TYPE *destBegin = toBegin + numElements;
4115 std::memmove((
void *)destBegin,
4117 tailLen *
sizeof(TARGET_TYPE));
4124 TARGET_TYPE *destEnd = toEnd + numElements;
4127 destEnd - numGuarded,
4128 destEnd - numGuarded,
4142 if (tailLen < numElements) {
4156 while (toEnd != destBegin) {
4167template <
class TARGET_TYPE,
class ALLOCATOR>
4169 TARGET_TYPE *toBegin,
4171 const TARGET_TYPE& value,
4173 ALLOCATOR allocator,
4202 const size_type tailLen = toEnd - toBegin;
4203 if (tailLen >= numElements) {
4211 toEnd - numElements,
4217 toEnd + numElements,
4230 TARGET_TYPE *src = toEnd - numElements;
4231 TARGET_TYPE *dest = toEnd;
4232 while (toBegin != src) {
4240 for ( ; toBegin != dest; ++toBegin) {
4241 *toBegin = space.
object();
4270 toEnd + numElements,
4288 for ( ; toBegin != toEnd; ++toBegin) {
4289 *toBegin = space.
object();
4299template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
4302 TARGET_TYPE *toBegin,
4307 ALLOCATOR allocator,
4315#if defined(BSLALG_ARRAYPRIMITIVES_CANNOT_REMOVE_POINTER_FROM_FUNCTION_POINTER)
4317 insert((
void * *)toBegin,
4319 (
void *
const *)fromBegin,
4320 (
void *
const *)fromEnd,
4333 reinterpret_cast<void * *
>(
const_cast<NcPtrType **
>(toBegin)),
4334 reinterpret_cast<void * *
>(
const_cast<NcPtrType **
>(toEnd)),
4335 reinterpret_cast<void *
const *
>(
const_cast<NcIter *
const *
>(fromBegin)),
4336 reinterpret_cast<void *
const *
>(
const_cast<NcIter *
const *
>(fromEnd)),
4343template <
class TARGET_TYPE,
class ALLOCATOR>
4346 TARGET_TYPE *toBegin,
4348 const TARGET_TYPE *fromBegin,
4349 const TARGET_TYPE *fromEnd,
4378 const size_type numBytes =
reinterpret_cast<const char*
>(toEnd)
4379 -
reinterpret_cast<const char*
>(toBegin);
4381 std::memmove((
void *)(toBegin + numElements), toBegin, numBytes);
4389 std::memcpy((
void *)toBegin,
4391 numElements *
sizeof(TARGET_TYPE));
4395template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
4397 TARGET_TYPE *toBegin,
4402 ALLOCATOR allocator,
4409 if (0 == numElements) {
4431 const size_type tailLen = toEnd - toBegin;
4432 const size_type numGuarded = tailLen < numElements ? tailLen : numElements;
4438 TARGET_TYPE *destBegin = toBegin + numElements;
4440 std::memmove((
void *)destBegin,
4442 tailLen *
sizeof(TARGET_TYPE));
4449 TARGET_TYPE *destEnd = toEnd + numElements;
4452 destEnd - numGuarded,
4453 destEnd - numGuarded,
4457 for (; guard.
middle() != guard.
end(); ++fromBegin) {
4467 if (tailLen < numElements) {
4484 for (; toEnd != destBegin; ++fromBegin) {
4495template <
class TARGET_TYPE,
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
4497 TARGET_TYPE *toBegin,
4502 ALLOCATOR allocator,
4508 if (0 == numElements) {
4520 const size_type tailLen = toEnd - toBegin;
4521 if (tailLen > numElements) {
4529 toEnd - numElements,
4535 toEnd + numElements,
4542 TARGET_TYPE *src = toEnd - numElements;
4543 TARGET_TYPE *dest = toEnd;
4544 while (toBegin != src) {
4552 for (; toBegin != dest; ++toBegin, ++fromBegin) {
4553 *toBegin = *fromBegin;
4574 toEnd + numElements,
4581 for (; toBegin != toEnd; ++fromBegin, ++toBegin) {
4582 *toBegin = *fromBegin;
4598template <
class FWD_ITER,
class SENTINEL,
class ALLOCATOR>
4618 if (0 == numElements) {
4640 const size_type tailLen = toEnd - toBegin;
4646 void **destBegin = toBegin + numElements;
4649 std::memmove(destBegin, toBegin, tailLen *
sizeof(
void **));
4652 for (
size_type i = 0; i < numElements; ++i) {
4653 *toBegin =
reinterpret_cast<void *
>(*fromBegin);
4662template <
class TARGET_TYPE,
class ALLOCATOR>
4665 TARGET_TYPE *toBegin,
4667 TARGET_TYPE **lastPtr,
4671 ALLOCATOR allocator,
4683 insert(toBegin, toEnd, first, last, numElements, allocator,
4688template <
class TARGET_TYPE,
class ALLOCATOR>
4691 TARGET_TYPE *toBegin,
4693 TARGET_TYPE **lastPtr,
4697 ALLOCATOR allocator,
4710 insert(toBegin, toEnd, first, last, numElements, allocator,
4718template <
class TARGET_TYPE>
4722 TARGET_TYPE *middle,
4730 reinterpret_cast<char *
>(middle),
4731 reinterpret_cast<char *
>(end));
4734template <
class TARGET_TYPE>
4737 TARGET_TYPE *middle,
4744 if (begin == middle || middle == end) {
4753 const std::size_t numElements = middle - begin;
4754 const std::size_t remElements = end - middle;
4756 if (numElements == remElements) {
4757 for (; middle != end; ++begin, ++middle) {
4758 TARGET_TYPE tmp(*middle);
4770 std::size_t numCycles = end - begin;
4771 std::size_t remainder = numElements;
4772 while (remainder != 0) {
4773 std::size_t t = numCycles % remainder;
4774 numCycles = remainder;
4785 for (std::size_t i = 0; i < numCycles; ++i) {
4790 TARGET_TYPE *ptr = begin;
4791 TARGET_TYPE tmp = *ptr;
4793 if (numElements < remElements) {
4811 std::size_t cycleSize = remElements / numCycles;
4813 for (std::size_t j = 0; j < cycleSize; ++j) {
4814 if (ptr > begin + remElements) {
4818 *ptr = *(ptr - remElements);
4822 *ptr = *(ptr + numElements);
4846 std::size_t cycleSize = numElements / numCycles - 1;
4848 for (std::size_t j = 0; j < cycleSize; ++j) {
4849 if (ptr < end - numElements) {
4850 *ptr = *(ptr + numElements);
4854 *ptr = *(ptr - remElements);
4873template <
class ALLOCATOR>
4880 ALLOCATOR allocator,
4891 ValueType *valuePtr =
4893 if (begin <= valuePtr && valuePtr < end) {
4897#if defined(BSLS_PLATFORM_PRAGMA_GCC_DIAGNOSTIC_GCC)
4899#pragma GCC diagnostic push
4900#pragma GCC diagnostic ignored "-Wclass-memaccess"
4904 std::memmove(
static_cast<void *
>(begin + 1),
4906 (end - begin) *
sizeof(ValueType));
4914#if defined(BSLS_PLATFORM_PRAGMA_GCC_DIAGNOSTIC_GCC)
4915#pragma GCC diagnostic pop
4919template <
class ALLOCATOR>
4926 ALLOCATOR allocator,
4937 ValueType *valuePtr =
4939 if (begin <= valuePtr && valuePtr < end) {
4944 size_t bytesNum = (end - begin) *
sizeof(ValueType);
4947#if defined(BSLS_PLATFORM_PRAGMA_GCC_DIAGNOSTIC_GCC)
4949#pragma GCC diagnostic push
4950#pragma GCC diagnostic ignored "-Wclass-memaccess"
4953 std::memmove(
static_cast<void *
>(begin + 1), begin, bytesNum);
4959 class ElementsProctor {
4966 ElementsProctor(ValueType *p,
size_t n) : d_begin(p), d_bytesNum(n) {}
4969 if(d_bytesNum) std::memmove(
static_cast<void *
>(d_begin),
4974 void release() { d_bytesNum = 0; }
4975 } proctor(begin, bytesNum);
4984#if defined(BSLS_PLATFORM_PRAGMA_GCC_DIAGNOSTIC_GCC)
4985#pragma GCC diagnostic pop
4989template <
class ALLOCATOR>
4996 ALLOCATOR allocator,
5007 ValueType *valuePtr =
5009 if (begin <= valuePtr && valuePtr < end) {
5032 end, end + 1, allocator);
5038 ValueType *dst = end;
5039 ValueType *src = end - 1;
5040 while (src != begin) {
5055#ifndef BDE_OPENSOURCE_PUBLICATION
5066#if defined(BSLALG_ARRAYPRIMITIVES_CANNOT_REMOVE_POINTER_FROM_FUNCTION_POINTER)
5067# undef BSLALG_ARRAYPRIMITIVES_CANNOT_REMOVE_POINTER_FROM_FUNCTION_POINTER
Definition bslalg_autoarraydestructor.h:232
OBJECT_TYPE * moveEnd(difference_type offset=1)
Definition bslalg_autoarraydestructor.h:331
OBJECT_TYPE * moveBegin(difference_type offset=-1)
Definition bslalg_autoarraydestructor.h:318
void release()
Definition bslalg_autoarraydestructor.h:342
Definition bslalg_autoarraymovedestructor.h:419
OBJECT_TYPE * middle() const
Return the address at the middle of the guarded range.
Definition bslalg_autoarraymovedestructor.h:582
OBJECT_TYPE * destination() const
Definition bslalg_autoarraymovedestructor.h:568
void advance()
Definition bslalg_autoarraymovedestructor.h:547
OBJECT_TYPE * end() const
Return the address at the end of the guarded range.
Definition bslalg_autoarraymovedestructor.h:575
Definition bslma_allocator.h:545
Definition bslma_destructorproctor.h:259
Definition bslmf_movableref.h:752
bslalg::ArrayPrimitives bslalg_ArrayPrimitives
This alias is defined for backward compatibility.
Definition bslalg_arrayprimitives.h:5061
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_UTIL_ADDRESSOF(OBJ)
Definition bsls_util.h:296
Definition bdlc_flathashmap.h:2218
static void construct(ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr, Args &&... arguments)
Definition bslma_allocatortraits.h:1527
BloombergLP::bslma::AllocatorTraits_PointerType< ALLOCATOR_TYPE >::type pointer
Definition bslma_allocatortraits.h:1180
ALLOCATOR_TYPE::value_type value_type
Definition bslma_allocatortraits.h:1176
Definition bslmf_integralconstant.h:261
Definition bslmf_isenum.h:272
Definition bslmf_isfundamental.h:330
Definition bslmf_ismemberpointer.h:143
Definition bslmf_ispointer.h:138
Definition bslmf_issame.h:146
Definition bslmf_istriviallydefaultconstructible.h:296
Definition bslmf_isvoid.h:138
Definition bslmf_removecv.h:120
Definition bslmf_removepointer.h:262
BloombergLP::bslmf::RemovePointer_Imp< t_TYPE >::Type type
Definition bslmf_removepointer.h:274
static void destroy(TARGET_TYPE *begin, TARGET_TYPE *end, ALLOCATOR allocator, bsl::true_type)
Definition bslalg_arraydestructionprimitives.h:238
Definition bslalg_arrayprimitives.h:1961
Definition bslalg_arrayprimitives.h:1242
static void emplace(TARGET_TYPE *toBegin, TARGET_TYPE *toEnd, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_COPYABLE_TRAITS >, ARGS &&... args)
TBD: document this.
Definition bslalg_arrayprimitives.h:3762
static void uninitializedFillN(bsls::Types::Int64 *begin, bsls::Types::Int64 value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void moveConstruct(TARGET_TYPE *toBegin, TARGET_TYPE *fromBegin, TARGET_TYPE *fromEnd, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_COPYABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:3584
static void copyConstruct(TARGET_TYPE *toBegin, FWD_ITER fromBegin, SENTINEL fromEnd, ALLOCATOR allocator, bsl::integral_constant< int, e_IS_ITERATOR_TO_FUNCTION_POINTER >)
static void bitwiseRotateBackward(char *begin, char *middle, char *end)
static void uninitializedFillN(float *begin, float value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void bitwiseRotate(char *begin, char *middle, char *end)
static void uninitializedFillN(volatile void **begin, volatile void *value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void shiftAndInsert(typename bsl::allocator_traits< ALLOCATOR >::pointer begin, typename bsl::allocator_traits< ALLOCATOR >::pointer end, bslmf::MovableRef< typename bsl::allocator_traits< ALLOCATOR >::value_type > value, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_COPYABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:4875
@ k_INPLACE_BUFFER_SIZE
Definition bslalg_arrayprimitives.h:1298
static void bitwiseFillN(char *begin, size_type numBytesInitialized, size_type numBytes)
static void bitwiseSwapRanges(char *begin, char *middle, char *end)
static void uninitializedFillN(bool *begin, bool value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
Definition bslalg_arrayprimitives.h:3128
static void moveInsert(TARGET_TYPE *toBegin, TARGET_TYPE *toEnd, TARGET_TYPE **lastPtr, TARGET_TYPE *first, TARGET_TYPE *last, size_type numElements, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_MOVEABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:4664
static void uninitializedFillN(double *begin, double value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void moveIfNoexcept(TARGET_TYPE *toBegin, TARGET_TYPE *fromBegin, TARGET_TYPE *fromEnd, ALLOCATOR allocator, bsl::integral_constant< int, e_NIL_TRAITS >)
Definition bslalg_arrayprimitives.h:3629
ArrayPrimitives::difference_type difference_type
Definition bslalg_arrayprimitives.h:1277
static void bitwiseRotateForward(char *begin, char *middle, char *end)
static void uninitializedFillN(short *begin, short value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
@ e_BITWISE_MOVEABLE_TRAITS
Definition bslalg_arrayprimitives.h:1290
@ e_HAS_TRIVIAL_DEFAULT_CTOR_TRAITS
Definition bslalg_arrayprimitives.h:1288
@ e_NIL_TRAITS
Definition bslalg_arrayprimitives.h:1291
@ e_BITWISE_COPYABLE_TRAITS
Definition bslalg_arrayprimitives.h:1289
@ e_IS_FUNDAMENTAL_OR_POINTER
Definition bslalg_arrayprimitives.h:1287
@ e_IS_ITERATOR_TO_FUNCTION_POINTER
Definition bslalg_arrayprimitives.h:1285
@ e_IS_POINTER_TO_POINTER
Definition bslalg_arrayprimitives.h:1286
ArrayPrimitives::size_type size_type
Definition bslalg_arrayprimitives.h:1276
static bool isInvalidRange(FORWARD_ITERATOR begin, SENTINEL end)
Definition bslalg_arrayprimitives.h:3092
static void destructiveMove(TARGET_TYPE *toBegin, TARGET_TYPE *fromBegin, TARGET_TYPE *fromEnd, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_MOVEABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:3718
static void uninitializedFillN(void **begin, void *value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void uninitializedFillN(int *begin, int value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void uninitializedFillN(const volatile void **begin, const volatile void *value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void erase(TARGET_TYPE *first, TARGET_TYPE *middle, TARGET_TYPE *last, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_MOVEABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:3947
static void rotate(TARGET_TYPE *begin, TARGET_TYPE *middle, TARGET_TYPE *end, bsl::integral_constant< int, e_BITWISE_MOVEABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:4720
static void uninitializedFillN(long double *begin, long double value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
static void insert(TARGET_TYPE *toBegin, TARGET_TYPE *toEnd, const TARGET_TYPE &value, size_type numElements, ALLOCATOR allocator, bsl::integral_constant< int, e_BITWISE_COPYABLE_TRAITS >)
Definition bslalg_arrayprimitives.h:4016
static void copyConstruct(TARGET_TYPE *toBegin, FWD_ITER fromBegin, SENTINEL fromEnd, ALLOCATOR allocator, bsl::integral_constant< int, e_IS_POINTER_TO_POINTER >)
Definition bslalg_arrayprimitives.h:3471
static void defaultConstruct(TARGET_TYPE *begin, size_type numElements, ALLOCATOR allocator, bsl::integral_constant< int, e_HAS_TRIVIAL_DEFAULT_CTOR_TRAITS >)
Definition bslalg_arrayprimitives.h:3659
static void uninitializedFillN(const void **begin, const void *value, size_type numElements, void *=0, bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >=bsl::integral_constant< int, e_IS_FUNDAMENTAL_OR_POINTER >())
Definition bslalg_arrayprimitives.h:424
static void destructiveMoveAndMoveInsert(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer *fromEndPtr, typename bsl::allocator_traits< ALLOCATOR >::pointer *lastPtr, typename bsl::allocator_traits< ALLOCATOR >::pointer fromBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer position, typename bsl::allocator_traits< ALLOCATOR >::pointer fromEnd, typename bsl::allocator_traits< ALLOCATOR >::pointer first, typename bsl::allocator_traits< ALLOCATOR >::pointer last, size_type numElements, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2553
static void destructiveMoveAndEmplace(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer *fromEndPtr, typename bsl::allocator_traits< ALLOCATOR >::pointer fromBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer position, typename bsl::allocator_traits< ALLOCATOR >::pointer fromEnd, ALLOCATOR allocator, ARGS &&... arguments)
Definition bslalg_arrayprimitives.h:2211
ArrayPrimitives_Imp Imp
Definition bslalg_arrayprimitives.h:428
static void insert(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer toEnd, bslmf::MovableRef< typename bsl::allocator_traits< ALLOCATOR >::value_type > value, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2745
static void destructiveMove(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer fromBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer fromEnd, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2172
static void defaultConstruct(typename bsl::allocator_traits< ALLOCATOR >::pointer begin, size_type numElements, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2129
static void moveInsert(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer toEnd, typename bsl::allocator_traits< ALLOCATOR >::pointer *fromEndPtr, typename bsl::allocator_traits< ALLOCATOR >::pointer fromBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer fromEnd, size_type numElements, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:3007
static void copyConstruct(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, FWD_ITER fromBegin, SENTINEL fromEnd, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2024
static void emplace(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer toEnd, ALLOCATOR allocator, ARGS &&... arguments)
Definition bslalg_arrayprimitives.h:2656
static void moveConstruct(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer fromBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer fromEnd, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2969
static void destructiveMoveAndInsert(typename bsl::allocator_traits< ALLOCATOR >::pointer toBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer *fromEndPtr, typename bsl::allocator_traits< ALLOCATOR >::pointer fromBegin, typename bsl::allocator_traits< ALLOCATOR >::pointer position, typename bsl::allocator_traits< ALLOCATOR >::pointer fromEnd, size_type numElements, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2282
std::ptrdiff_t difference_type
Definition bslalg_arrayprimitives.h:430
static void erase(typename bsl::allocator_traits< ALLOCATOR >::pointer first, typename bsl::allocator_traits< ALLOCATOR >::pointer middle, typename bsl::allocator_traits< ALLOCATOR >::pointer last, ALLOCATOR allocator)
Definition bslalg_arrayprimitives.h:2702
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:1970
std::size_t size_type
Definition bslalg_arrayprimitives.h:429
static void rotate(TARGET_TYPE *first, TARGET_TYPE *middle, TARGET_TYPE *last)
Definition bslalg_arrayprimitives.h:3054
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1244
static Allocator * allocator(Allocator *basicAllocator=0)
Definition bslma_default.h:913
Definition bslmf_isbitwisecopyable.h:298
Definition bslmf_isbitwisemoveable.h:718
Definition bslmf_functionpointertraits.h:163
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1039
static bsl::enable_if<!bsl::is_nothrow_move_constructible< t_TYPE >::value &&bsl::is_copy_constructible< t_TYPE >::value, constt_TYPE & >::type move_if_noexcept(t_TYPE &lvalue) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:919
@ BSLS_MAX_ALIGNMENT
Definition bsls_alignmentutil.h:300
unsigned long long Uint64
Definition bsls_types.h:139
long long Int64
Definition bsls_types.h:134
Definition bsls_objectbuffer.h:277
TYPE & object()
Definition bsls_objectbuffer.h:352