// bslalg_dequeprimitives_cpp03.h -*-C++-*- // Automatically generated file. **DO NOT EDIT** #ifndef INCLUDED_BSLALG_DEQUEPRIMITIVES_CPP03 #define INCLUDED_BSLALG_DEQUEPRIMITIVES_CPP03 //@PURPOSE: Provide C++03 implementation for bslalg_dequeprimitives.h // //@CLASSES: See bslalg_dequeprimitives.h for list of classes // //@SEE_ALSO: bslalg_dequeprimitives // //@DESCRIPTION: This component is the C++03 translation of a C++11 component, // generated by the 'sim_cpp11_features.pl' program. If the original header // contains any specially delimited regions of C++11 code, then this generated // file contains the C++03 equivalent, i.e., with variadic templates expanded // and rvalue-references replaced by 'bslmf::MovableRef' objects. The header // code in this file is designed to be '#include'd into the original header // when compiling with a C++03 compiler. If there are no specially delimited // regions of C++11 code, then this header contains no code and is not // '#include'd in the original header. // // Generated on Wed Dec 7 07:39:24 2022 // Command line: sim_cpp11_features.pl bslalg_dequeprimitives.h #ifdef COMPILING_BSLALG_DEQUEPRIMITIVES_H namespace BloombergLP { namespace { // Workaround for windows. The windows compiler refuses to recognize // enum declarations within a class template. TBD: verify this is // still a concern with recent Windows compilers, as unnamed namespaces // in header files are not a great workaround. enum { // These constants are used in the overloads below, when the last // argument is of type 'bslmf::MetaInt<N> *', indicating that // 'VALUE_TYPE' has the traits for which the enumerator equal to 'N' is // named. NIL_TRAITS = 0, BITWISE_MOVEABLE_TRAITS = 1, BITWISE_COPYABLE_TRAITS = 2, NON_NIL_TRAITS = 3 }; } // close unnamed namespace namespace bslalg { template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> class DequePrimitives_DequeElementGuard; template <class VALUE_TYPE, int BLOCK_LENGTH> class DequePrimitives_DequeMoveGuard; template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> class DequePrimitives_ExternalDequeElementGuard; template <class VALUE_TYPE, int BLOCK_LENGTH> class DequePrimitives_DequeEndpointProctor; // ====================== // struct DequePrimitives // ====================== template <class VALUE_TYPE, int BLOCK_LENGTH> struct DequePrimitives { // This 'struct' provides a namespace for a suite of utility functions that // operate on deques parameterized by the 'VALUE_TYPE' and 'BLOCK_LENGTH'. // Depending on the traits of 'VALUE_TYPE', the default and copy // constructors, destructor, assignment operators, etcetera may not be // invoked, and instead the operation can be optimized using a no-op, // bitwise move, or bitwise copy. // PUBLIC TYPES typedef std::size_t size_type; typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH> Iterator; private: // PRIVATE TYPES typedef DequeImpUtil<VALUE_TYPE, BLOCK_LENGTH> ImpUtil; typedef DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH> MoveGuard; typedef bslmf::MovableRefUtil MoveUtil; public: // CLASS METHODS template <class ALLOCATOR> static void destruct(Iterator begin, Iterator end, ALLOCATOR allocator); // TBD: fix comment // Call the destructor on each of the elements of a deque of // parameterized 'VALUE_TYPE' in the specified range '[begin .. end)'. // The behavior is undefined unless 'begin <= end'. Note that this // does not deallocate any memory (except memory deallocated by the // element destructor calls). template <class ALLOCATOR> static void destruct(Iterator begin, Iterator end, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); template <class ALLOCATOR> static void destruct(Iterator begin, Iterator end, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); // Call the destructor on each of the elements of a deque of // parameterized 'VALUE_TYPE' in the specified range '[begin .. end)'. // The behavior is undefined unless 'begin <= end'. Note that this // does not deallocate any memory (except memory deallocated by the // element destructor calls). Note that the last argument is for // removing overload ambiguities and is not used. template <class ALLOCATOR> static Iterator erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator); // Call the destructor on each of the elements of a deque of // parameterized 'VALUE_TYPE' in the specified range '[first .. last)'. // Shift the elements to fill up the empty space after the erasure, // using the smaller of the range defined by '[fromBegin .. first)' and // '[last .. fromEnd)' after the erasure. Load in the specified // 'toBegin' and 'toEnd' the new boundaries of the deque after erasure // and return an iterator pointing to the element immediately following // the removed elements. The behavior is undefined unless // 'fromBegin <= first <= last <= fromEnd'. template <class ALLOCATOR> static Iterator erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); template <class ALLOCATOR> static Iterator erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); // Call the destructor on each of the elements of a deque of // parameterized 'VALUE_TYPE' in the specified range '[first .. last)'. // Shift the elements from the smaller of the specified range // '[fromBegin .. first)' and '[last .. fromEnd)' to fill up the empty // spaces after the erasure. Load in the specified 'toBegin' and // 'toEnd' the new boundaries of the deque after erasure and return an // iterator pointing to the element immediately following the removed // elements. The behavior is undefined unless // 'fromBegin <= first <= last <= fromEnd'. Note that the last // argument is for removing overload ambiguities and is not used. template <class ALLOCATOR> static void insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); // Insert the specified 'numElements' copies of the specified 'value' // at the specified 'position', by moving the elements in the range // '[position .. fromEnd)' forward by 'numElements' position. Pass the // specified 'allocator' to the copy constructor if appropriate. Load // into the specified 'toEnd' an iterator to the end of the deque after // insertion (i.e., 'fromEnd + numElements'). The behavior is // undefined unless 'fromEnd + numElements' is a valid iterator (i.e., // the block pointer array holds enough room after the 'fromEnd' // position to insert 'numElements'). template <class ALLOCATOR> static void insertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); template <class ALLOCATOR> static void insertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *); template <class ALLOCATOR> static void insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); // Insert the specified 'numElements' copies of the specified 'value' // at the specified 'position', by moving the elements in the range // '[position .. fromEnd)' forward by 'numElements' position. Pass the // specified 'allocator' to the copy constructor if appropriate. Load // into the specified 'toEnd' an iterator to the end of the deque after // insertion (i.e., 'fromEnd + numElements'). The behavior is // undefined unless 'fromEnd + numElements' is a valid iterator (i.e., // the block pointer array holds enough room after the 'fromEnd' // position to insert 'numElements'). Note that the last argument is // for removing overload ambiguities and is not used. template <class FWD_ITER, class ALLOCATOR> static void insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, FWD_ITER first, FWD_ITER last, size_type numElements, ALLOCATOR allocator); // Insert the specified 'numElements' in the range '[first .. last)' at // the specified 'position', by moving the elements in the range // '[position .. fromEnd)' forward by 'numElements' position. Pass the // specified 'allocator' to the copy constructor if appropriate. Load // into the specified 'toEnd' an iterator to the end of the data after // insertion (i.e., 'fromEnd + numElements'). The behavior is // undefined unless 'fromEnd + numElements' is a valid iterator (i.e., // the block pointer array holds enough room after the 'fromEnd' // position to insert 'numElements'). template <class ALLOCATOR> static void moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator); // Insert the specified move-insertable 'value' at the specified // 'position' by moving the elements in the range // '[position .. fromEnd)' forward by 1 position; pass the specified // 'allocator' to the move constructor if appropriate. Load into the // specified 'toEnd' an iterator one past the inserted element (i.e., // 'fromEnd + 1'). The behavior is undefined unless 'fromEnd + 1' is a // valid iterator (i.e., the block pointer array holds enough room // after the 'fromEnd' position to insert 1 element). template <class ALLOCATOR> static void moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); template <class ALLOCATOR> static void moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *); template <class ALLOCATOR> static void moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); // Insert the specified move-insertable 'value' at the specified // 'position' by moving the elements in the range // '[position .. fromEnd)' forward by 1 position; pass the specified // 'allocator' to the move constructor if appropriate. Load into the // specified 'toEnd' an iterator one past the inserted element (i.e., // 'fromEnd + 1'). The behavior is undefined unless 'fromEnd + 1' is a // valid iterator (i.e., the block pointer array holds enough room // after the 'fromEnd' position to insert 1 element). Note that the // last argument is for removing overload ambiguities and is not used. template <class ALLOCATOR> static void insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); // Insert the specified 'numElements' copies of the specified 'value' // at the specified 'position', by moving the elements in the range // '[fromBegin .. position)' backward by 'numElements' position. Pass // the specified 'allocator' to the copy constructor if appropriate. // Load into the specified 'toBegin' an iterator to the beginning of // the data after insertion (i.e., 'fromBegin - numElements'). The // behavior is undefined unless 'fromBegin - numElements' is a valid // iterator (i.e., the block pointer array holds enough room before the // 'fromBegin' position to insert 'numElements'). template <class ALLOCATOR> static void insertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); template <class ALLOCATOR> static void insertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *); template <class ALLOCATOR> static void insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); // Insert the specified 'numElements' copies of the specified 'value' // at the specified 'position', by moving the elements in the range // '[fromBegin .. position)' backward by 'numElements' position. Pass // the specified 'allocator' to the copy constructor if appropriate. // Load into the specified 'toBegin' an iterator to the beginning of // the data after insertion (i.e., 'fromBegin - numElements'. The // behavior is undefined unless 'fromBegin - numElements' is a valid // iterator (i.e., the block pointer array holds enough room before the // 'fromBegin' position to insert 'numElements'). Note that the last // argument is for removing overload ambiguities and is not used. template <class FWD_ITER, class ALLOCATOR> static void insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, FWD_ITER first, FWD_ITER last, size_type numElements, ALLOCATOR allocator); // Insert the specified 'numElements' in the range '[first .. last)' at // the specified 'position', by moving the elements in the range // '[fromBegin .. position)' backward by 'numElements' position. Pass // the specified 'allocator' to the copy constructor if appropriate. // Load into the specified 'toBegin' an iterator to the end of the data // after insertion (i.e., 'fromBegin - numElements'). The behavior is // undefined unless 'fromBegin - numElements' is a valid iterator // (i.e., the block pointer array holds enough room before the // 'fromBefore' position to insert 'numElements'). template <class ALLOCATOR> static void moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator); // Insert the specified move-insertable 'value' at the specified // 'position' by moving the elements in the range // '[fromBegin .. position)' backward by 1 position; pass the specified // 'allocator' to the move constructor if appropriate. Load into the // specified 'toBegin' an iterator to the inserted element (i.e., // 'fromBegin - 1'). The behavior is undefined unless // 'fromBegin - 1' is a valid iterator (i.e., the block pointer array // holds enough room before the 'fromBegin' position to insert 1 // element). template <class ALLOCATOR> static void moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); template <class ALLOCATOR> static void moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *); template <class ALLOCATOR> static void moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); // Insert the specified move-insertable 'value' at the specified // 'position' by moving the elements in the range // '[fromBegin .. position)' backward by 1 position; pass the specified // 'allocator' to the move constructor if appropriate. Load into the // specified 'toBegin' an iterator to the inserted element (i.e., // 'fromBegin - 1'). The behavior is undefined unless // 'fromBegin - 1' is a valid iterator (i.e., the block pointer array // holds enough room before the 'fromBegin' position to insert 1 // element). Note that the last argument is for removing overload // ambiguities and is not used. #if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES // {{{ BEGIN GENERATED CODE // Command line: sim_cpp11_features.pl bslalg_dequeprimitives.h #ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT #define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT 10 #endif #ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A #define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT #endif #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 template <class ALLOCATOR> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 template <class ALLOCATOR, class Args_01> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 template <class ALLOCATOR, class Args_01, class Args_02> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10); #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_A >= 10 #else // The generated code below is a workaround for the absence of perfect // forwarding in some compilers. template <class ALLOCATOR, class... Args> static void emplaceAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); template <class ALLOCATOR, class... Args> static void emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments); // }}} END GENERATED CODE #endif static void moveBack(Iterator *destination, Iterator *source, size_type numElements); // Move the specified 'numElements' from the specified 'source' to the // specified 'destination' using 'std::memmove'. Also load into // 'destination' the value 'destination - numElements' and 'source' the // value 'source - numElements'. The behavior is undefined unless // 'destination >= source'. static void moveFront(Iterator *destination, Iterator *source, size_type numElements); // Move the specified 'numElements' from the specified 'source' to the // specified 'destination' using 'std::memmove'. Also load into // 'destination' the value 'destination + numElements' and 'source' the // the value 'source + numElements'. The behavior is undefined unless // 'destination <= source'. template <class ALLOCATOR> static void uninitializedFillNBack(Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); // Append the specified 'numElements' copies of the specified 'value' // to the deque ending at the specified 'fromEnd' iterator, passing the // specified 'allocator' through to the new elements, and load into the // specified 'toEnd' an iterator pointing to the end of the data after // appending (i.e., 'fromEnd + numElements'). The behavior is // undefined unless 'fromEnd + numElements' is a valid iterator (i.e., // the block pointer array holds enough room after the 'fromEnd' // position to insert 'numElements'). template <class ALLOCATOR> static void uninitializedFillNFront(Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); // Prepend the specified 'numElements' copies of the specified 'value' // to the deque starting at the specified 'fromBegin' iterator, passing // the specified 'allocator' through to the new elements, and load into // the specified 'toBegin' an iterator pointing to the end of the data // after prepending, i.e., 'fromBegin - numElements'. The behavior is // undefined unless 'fromBegin - numElements' is a valid iterator // (i.e., the block pointer array holds enough room before the // 'fromBegin' position to insert 'numElements'). template <class ALLOCATOR> static void valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator); // Append the specified 'numElements' value-initialized objects to the // deque ending at the specified 'fromEnd' iterator, passing the // specified 'allocator' through to the new elements, and load into the // specified 'toEnd' an iterator pointing to the end of the data after // appending (i.e., 'fromEnd + numElements'). The behavior is // undefined unless 'fromEnd + numElements' is a valid iterator (i.e., // the block pointer array holds enough room after the 'fromEnd' // position to insert 'numElements'). }; // PARTIAL SPECIALIZATION template <class VALUE_TYPE> struct DequePrimitives<VALUE_TYPE, 1> { // This is a partial specialization of 'DequePrimitives' for the case when // there is a single element per block. // PUBLIC TYPES typedef std::size_t size_type; typedef DequeImpUtil<VALUE_TYPE, 1> ImpUtil; typedef DequeIterator<VALUE_TYPE, 1> Iterator; // CLASS METHODS template <class ALLOCATOR> static void destruct(Iterator begin, Iterator end, ALLOCATOR allocator); template <class ALLOCATOR> static Iterator erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator); template <class ALLOCATOR> static void insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); template <class FWD_ITER, class ALLOCATOR> static void insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, FWD_ITER first, FWD_ITER last, size_type numElements, ALLOCATOR allocator); template <class ALLOCATOR> static void insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); template <class FWD_ITER, class ALLOCATOR> static void insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, FWD_ITER first, FWD_ITER last, size_type numElements, ALLOCATOR allocator); template <class ALLOCATOR> static void uninitializedFillNBack(Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); template <class ALLOCATOR> static void uninitializedFillNBack(Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); template <class ALLOCATOR> static void uninitializedFillNBack( Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NON_NIL_TRAITS> *); template <class ALLOCATOR> static void uninitializedFillNFront(Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator); template <class ALLOCATOR> static void uninitializedFillNFront( Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); template <class ALLOCATOR> static void uninitializedFillNFront( Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NON_NIL_TRAITS> *); template <class ALLOCATOR> static void valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator); template <class ALLOCATOR> static void valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *); template <class ALLOCATOR> static void valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator, bslmf::MetaInt<NON_NIL_TRAITS> *); }; // ======================================= // class DequePrimitives_DequeElementGuard // ======================================= template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> class DequePrimitives_DequeElementGuard { // This 'class' provides a specialized proctor object that, upon // destruction and unless the 'release' method has been called, destroys // the elements in a segment of a deque of parameterized 'VALUE_TYPE'. The // elements destroyed are delimited by the "guarded" range // '[d_begin .. d_end)'. public: // PUBLIC TYPES typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH> Iterator; private: // DATA Iterator d_begin; // iterator of first element in guarded range Iterator d_end; // iterator beyond last element in guarded range ALLOCATOR d_allocator; private: // NOT IMPLEMENTED DequePrimitives_DequeElementGuard( const DequePrimitives_DequeElementGuard&); DequePrimitives_DequeElementGuard& operator=( const DequePrimitives_DequeElementGuard&); public: // CREATORS DequePrimitives_DequeElementGuard(const Iterator& begin, const Iterator& end, ALLOCATOR allocator); // Create a deque exception guard object for the sequence of elements // of the parameterized 'VALUE_TYPE' delimited by the specified range // '[begin .. end)'. The behavior is undefined unless 'begin <= end' // and unless each element in the range '[begin .. end)' has been // initialized. ~DequePrimitives_DequeElementGuard(); // Call the destructor on each of the elements of the parameterized // 'VALUE_TYPE' delimited by the range '[begin .. end)' and destroy // this array exception guard. // MANIPULATORS Iterator& moveBegin(std::ptrdiff_t offset = -1); // Move the begin iterator by the specified 'offset', and return the // new begin iterator. Iterator& moveEnd(std::ptrdiff_t offset = 1); // Move the end pointer by the specified 'offset', and return the new // end pointer. void release(); // Set the range of elements guarded by this object to be empty. Note // that 'd_begin == d_end' following this operation, but the specific // value is unspecified. }; // =============================================== // class DequePrimitives_ExternalDequeElementGuard // =============================================== template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> class DequePrimitives_ExternalDequeElementGuard { // This 'class' provides a specialized proctor object that, upon // destruction and unless the 'release' method has been called, destroys // the elements in a segment of a 'bsl::deque' of parameterized type // 'VALUE_TYPE'. The elements destroyed are delimited by the "guarded" // range '[*d_begin .. *d_end)'. Note that the range guarded by this // 'class' is dynamic and can be changed outside of this 'class'. public: // PUBLIC TYPES typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH> Iterator; private: // DATA Iterator *d_begin_p; // pointer to iterator of first element in guarded // range Iterator *d_end_p; // pointer to iterator beyond last element in // guarded range ALLOCATOR d_allocator; private: // NOT IMPLEMENTED DequePrimitives_ExternalDequeElementGuard( const DequePrimitives_ExternalDequeElementGuard&); DequePrimitives_ExternalDequeElementGuard& operator=( const DequePrimitives_ExternalDequeElementGuard&); public: // CREATORS DequePrimitives_ExternalDequeElementGuard(Iterator *begin, Iterator *end, ALLOCATOR allocator); // Create a deque exception guard object for the sequence of elements // of the parameterized 'VALUE_TYPE' delimited by the specified range // '[*begin .. *end)'. The behavior is undefined unless '*begin' <= // '*end' and unless each element in the range '[*begin .. *end)' has // been initialized. ~DequePrimitives_ExternalDequeElementGuard(); // Call the destructor on each of the elements of the parameterized // 'VALUE_TYPE' delimited by the range '[*d_begin_p .. *d_end_p)' and // destroy this array exception guard. // MANIPULATORS void release(); // Set the range of elements guarded by this object to be empty. Note // that 'd_begin_p == d_end_p == 0' following this operation. }; // ==================================== // class DequePrimitives_DequeMoveGuard // ==================================== template <class VALUE_TYPE, int BLOCK_LENGTH> class DequePrimitives_DequeMoveGuard { // This 'class' provides a guard object that, upon destruction and unless // the 'release' method has been called, uses 'moveBack' or 'moveFront' to // move the "guarded" range '[d_source_p .. d_source_p + d_size - 1]' // back to '[d_destination_p .. d_destination_p + d_size -1]'. public: // PUBLIC TYPES typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH> Iterator; typedef bslalg::DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> DequePrimitives; private: // DATA Iterator d_destination_p; // destination of the move Iterator d_source_p; // source of the move std::size_t d_size; // size of the range being guarded bool d_front; // whether to use 'moveFront' private: // NOT IMPLEMENTED DequePrimitives_DequeMoveGuard(const DequePrimitives_DequeMoveGuard&); DequePrimitives_DequeMoveGuard& operator=( const DequePrimitives_DequeMoveGuard&); public: // CREATORS DequePrimitives_DequeMoveGuard(Iterator dest, Iterator src, std::size_t size, bool isFront); // Create a guard object that will call 'moveBack' or 'moveFront', // depending on the specified 'isFront', on the specified 'size' // elements from 'src' to 'dest' upon destruction unless 'release' has // been called. ~DequePrimitives_DequeMoveGuard(); // Call either 'moveBack' or 'moveFront' depending on 'd_front' upon // destruction unless 'release' has been called before this. // MANIPULATORS void release(); // Set the size of the range guarded by this object to be zero. }; // ========================================== // class DequePrimitives_DequeEndpointProctor // ========================================== template <class VALUE_TYPE, int BLOCK_LENGTH> class DequePrimitives_DequeEndpointProctor { // This class implements a proctor that, upon destruction and unless its // 'release' method has previously been invoked, sets a deque endpoint // (i.e., "start" or "finish" iterator) to a position within the deque. // Both the endpoint and position are supplied at construction. See // 'emplaceAndMoveToBack' and 'emplaceAndMoveToFront' for use cases. public: // PUBLIC TYPES typedef DequeIterator<VALUE_TYPE, BLOCK_LENGTH> Iterator; private: // DATA Iterator *d_endpoint_p; // proctored endpoint of a deque Iterator d_position; // set endpoint to this upon destruction private: // NOT IMPLEMENTED DequePrimitives_DequeEndpointProctor( const DequePrimitives_DequeEndpointProctor&); DequePrimitives_DequeEndpointProctor& operator=( const DequePrimitives_DequeEndpointProctor&); public: // CREATORS DequePrimitives_DequeEndpointProctor(Iterator *endpoint, Iterator position); // Create a deque endpoint proctor that conditionally manages the // specified 'endpoint' (if non-zero) by setting '*endpoint' to the // specified 'position' (if not released -- see 'release') upon // destruction. ~DequePrimitives_DequeEndpointProctor(); // Destroy this endpoint proctor, and set the deque endpoint it manages // (if any) to the position supplied at construction. If no endpoint // is currently being managed, this method has no effect. // MANIPULATORS void release(); // Release from management the deque endpoint currently managed by this // proctor. If no endpoint is currently being managed, this method has // no effect. }; // ============================================================================ // INLINE FUNCTION DEFINITIONS // ============================================================================ // --------------------- // class DequePrimitives // --------------------- // CLASS METHODS template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::destruct(Iterator begin, Iterator end, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : NIL_TRAITS }; return destruct(begin, end, allocator, (bslmf::MetaInt<VALUE>*) 0); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::destruct(Iterator , Iterator , ALLOCATOR , bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { // No-op. } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::destruct( Iterator begin, Iterator end, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { for (; !(begin == end); ++begin) { bsl::allocator_traits<ALLOCATOR>::destroy(allocator, begin.valuePtr()); } } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline typename DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::Iterator DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : NIL_TRAITS }; return erase(toBegin, toEnd, fromBegin, first, last, fromEnd, allocator, (bslmf::MetaInt<VALUE>*) 0); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> typename DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::Iterator DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::erase( Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { if (first == last) { // Nothing to delete, bail out fast *toBegin = fromBegin; *toEnd = fromEnd; return first; // RETURN } size_type frontSize = first - fromBegin; size_type backSize = fromEnd - last; Iterator ret; if (frontSize < backSize) { ret = last; for (; 0 < frontSize; --frontSize) { --last; --first; *last = MoveUtil::move(*first); } *toBegin = last; *toEnd = fromEnd; } else { ret = first; for (; 0 < backSize; --backSize, ++first, ++last) { *first = MoveUtil::move(*last); } *toBegin = fromBegin; *toEnd = first; } destruct(first, last, allocator); return ret; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> typename DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::Iterator DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR , bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { size_type frontSize = first - fromBegin; size_type backSize = fromEnd - last; Iterator ret; if (frontSize < backSize) { ret = last; moveBack(&last, &first, frontSize); *toBegin = last; *toEnd = fromEnd; } else { ret = first; moveFront(&first, &last, backSize); *toBegin = fromBegin; *toEnd = first; } // 'destruct' is no-op for types with 'BITWISE_COPYABLE_TRAITS'. return ret; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; insertAndMoveToBack(toEnd, fromEnd, position, numElements, value, allocator, (bslmf::MetaInt<VALUE>*)0); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + numElements; bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct( BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); // No guard needed since all the operations won't throw due to the // bitwise-copyable trait moveBack(&dest, &end, backSize); uninitializedFillNFront(&dest, dest, numElements, space.object(), allocator); *toEnd = fromEnd + numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *) { typedef DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ExtGuard; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + numElements; // In case of aliasing, make a copy of the value. bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct( BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); // Setup a reverse guard that will reverse the moveBack operation in case // of an exception. MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); // Create a guard for 'uninitializedFillNBack' because it can throw under // 'bitwisemoveable' trait. Need to use this special guard because // uninitializedFillNFront is not exception safe. Iterator dest2(dest); ExtGuard eguard(&dest, &dest2, allocator); uninitializedFillNFront(&dest, dest, numElements, space.object(), allocator); eguard.release(); guard.release(); *toEnd = fromEnd + numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + numElements; size_type numDest; // In case of aliasing, make a copy of the value. bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct(BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> tempValue(value, // bslma::Default::allocator()); ElementGuard guard(dest, dest, allocator); if (backSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (backSize -= numElements; 0 < backSize; --backSize) { --dest; --end; *dest = *end; } for (numDest = numElements; 0 < numDest; --numDest, ++position) { *position = space.object(); } } else { for (numDest = backSize; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (numDest = numElements; backSize < numDest; --numDest) { --dest; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), space.object()); guard.moveBegin(-1); } for (; 0 < numDest; --numDest, ++position) { *position = space.object(); } } guard.release(); *toEnd = fromEnd + numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class FWD_ITER, class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, FWD_ITER first, FWD_ITER /*last*/, size_type numElements, ALLOCATOR allocator) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + numElements; size_type numDest; ElementGuard guard(dest, dest, allocator); if (backSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (numDest = backSize; numElements < numDest; --numDest) { --dest; --end; *dest = *end; } for (; 0 < numDest; ++first, ++position, --numDest) { *position = *first; } } else { for (numDest = backSize; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (numDest = backSize; 0 < numDest; --numDest, ++position, ++first) { *position = *first; } // Second guard needed because we're guarding from a different range. ElementGuard guard2(position, position, allocator); for (numDest = numElements; backSize < numDest; ++first, ++position, --numDest) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, position.valuePtr(), *first); guard2.moveEnd(1); } guard2.release(); } guard.release(); *toEnd = fromEnd + numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; VALUE_TYPE& lvalue = value; moveInsertAndMoveToBack(toEnd, fromEnd, position, MoveUtil::move(lvalue), allocator, (bslmf::MetaInt<VALUE> *)0); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; // No guard needed since no operations will throw with // 'BITWISE_COPYABLE_TRAITS'. moveBack(&dest, &end, backSize); --dest; VALUE_TYPE& lvalue = value; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), MoveUtil::move(lvalue)); *toEnd = fromEnd + 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; // Create a reverse guard that will undo the 'moveBack' operation in case // of an exception. MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; VALUE_TYPE& lvalue = value; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), MoveUtil::move(lvalue)); guard.release(); *toEnd = fromEnd + 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); // 1. move-construct back-most element being bumped 1 slot --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); // 2. move-assign other existing elements being bumped back 1 slot for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); } // 3. move-assign new element VALUE_TYPE& lvalue = value; *position = MoveUtil::move(lvalue); guard.release(); *toEnd = fromEnd + 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; insertAndMoveToFront(toBegin, fromBegin, position, numElements, value, allocator, (bslmf::MetaInt<VALUE>*)0); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - numElements; // In case of aliasing, make a copy of the value. bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct(BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); // No guard needed since all the operations won't throw due to the // bitwise-copyable trait moveFront(&dest, &begin, frontSize); uninitializedFillNBack(&dest, dest, numElements, space.object(), allocator); *toBegin = fromBegin - numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *) { typedef DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ExtGuard; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - numElements; // In case of aliasing, make a copy of the value. bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct(BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); // Create a reverse guard that will reverse the moveFront operation in case // of an exception. MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); // Create a guard for 'uninitializedFillNBack' because it can throw under // 'bitwisemoveable' trait. Need to use this special guard because // uninitializedFillNBack is not exception safe. Iterator dest2(dest); ExtGuard eguard(&dest2, &dest, allocator); uninitializedFillNBack(&dest, dest, numElements, space.object(), allocator); eguard.release(); guard.release(); *toBegin = fromBegin - numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - numElements; size_type numDest; // In case of aliasing, make a copy of the value. bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct(BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); ElementGuard guard(dest, dest, allocator); if (frontSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (frontSize -= numElements; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = *begin; } for (numDest = numElements; 0 < numDest; --numDest, ++dest) { *dest = space.object(); } } else { for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (numDest = numElements; frontSize < numDest; --numDest, ++dest) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), space.object()); guard.moveEnd(1); } for (; 0 < numDest; --numDest, ++dest) { *dest = space.object(); } } guard.release(); *toBegin = fromBegin - numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class FWD_ITER, class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, FWD_ITER first, FWD_ITER /*last*/, size_type numElements, ALLOCATOR allocator) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - numElements; size_type numDest; ElementGuard guard(dest, dest, allocator); if (frontSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (frontSize -= numElements; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = *begin; } for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++first) { *dest = *first; } } else { for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (numDest = numElements; frontSize < numDest; --numDest, ++dest, ++first) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *first); guard.moveEnd(1); } for (; 0 < numDest; --numDest, ++dest, ++first) { *dest = *first; } } guard.release(); *toBegin = fromBegin - numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; VALUE_TYPE& lvalue = value; moveInsertAndMoveToFront(toBegin, fromBegin, position, MoveUtil::move(lvalue), allocator, (bslmf::MetaInt<VALUE> *)0); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; // No guard needed since no operations will throw with // 'BITWISE_COPYABLE_TRAITS'. moveFront(&dest, &begin, frontSize); VALUE_TYPE& lvalue = value; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), MoveUtil::move(lvalue)); *toBegin = fromBegin - 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; // Create a reverse guard that will undo the 'moveFront' operation in case // of an exception. MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); VALUE_TYPE& lvalue = value; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), MoveUtil::move(lvalue)); guard.release(); *toBegin = fromBegin - 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::moveInsertAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, bslmf::MovableRef<VALUE_TYPE> value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); // 1. move-construct front-most element being bumped 1 slot bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; // 2. move-assign other existing elements being bumped forward 1 slot for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); } // 3. move-assign the new element VALUE_TYPE& lvalue = value; *dest = MoveUtil::move(lvalue); guard.release(); *toBegin = fromBegin - 1; } #if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES // {{{ BEGIN GENERATED CODE // Command line: sim_cpp11_features.pl bslalg_dequeprimitives.h #ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT #define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT 10 #endif #ifndef BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B #define BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT #endif #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr()); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr()); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr()); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr()); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr()); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr()); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 0 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 1 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 2 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 3 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 4 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 5 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 6 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 7 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 8 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 9 #if BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class Args_01, class Args_02, class Args_03, class Args_04, class Args_05, class Args_06, class Args_07, class Args_08, class Args_09, class Args_10> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args_01) arguments_01, BSLS_COMPILERFEATURES_FORWARD_REF(Args_02) arguments_02, BSLS_COMPILERFEATURES_FORWARD_REF(Args_03) arguments_03, BSLS_COMPILERFEATURES_FORWARD_REF(Args_04) arguments_04, BSLS_COMPILERFEATURES_FORWARD_REF(Args_05) arguments_05, BSLS_COMPILERFEATURES_FORWARD_REF(Args_06) arguments_06, BSLS_COMPILERFEATURES_FORWARD_REF(Args_07) arguments_07, BSLS_COMPILERFEATURES_FORWARD_REF(Args_08) arguments_08, BSLS_COMPILERFEATURES_FORWARD_REF(Args_09) arguments_09, BSLS_COMPILERFEATURES_FORWARD_REF(Args_10) arguments_10) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args_01, arguments_01), BSLS_COMPILERFEATURES_FORWARD(Args_02, arguments_02), BSLS_COMPILERFEATURES_FORWARD(Args_03, arguments_03), BSLS_COMPILERFEATURES_FORWARD(Args_04, arguments_04), BSLS_COMPILERFEATURES_FORWARD(Args_05, arguments_05), BSLS_COMPILERFEATURES_FORWARD(Args_06, arguments_06), BSLS_COMPILERFEATURES_FORWARD(Args_07, arguments_07), BSLS_COMPILERFEATURES_FORWARD(Args_08, arguments_08), BSLS_COMPILERFEATURES_FORWARD(Args_09, arguments_09), BSLS_COMPILERFEATURES_FORWARD(Args_10, arguments_10)); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } #endif // BSLALG_DEQUEPRIMITIVES_VARIADIC_LIMIT_B >= 10 #else // The generated code below is a workaround for the absence of perfect // forwarding in some compilers. template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToBackDispatch( toEnd, fromEnd, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); *toEnd = fromEnd + 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { const size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; MoveGuard guard(end, dest, backSize, false); moveBack(&dest, &end, backSize); --dest; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); guard.release(); *toEnd = fromEnd + 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToBackDispatch( Iterator *toEnd, Iterator fromEnd, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + 1; BSLS_ASSERT_SAFE(backSize >= 1); ElementGuard guard(dest, dest, allocator); --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*end)); guard.moveBegin(-1); size_type n = 0; for (backSize -= 1; 0 < backSize; --backSize) { --dest; --end; *dest = MoveUtil::move_if_noexcept(*end); ++n; } guard.moveBegin(-n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, position.valuePtr()); EndpointProctor endpointProctor(toEnd, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, position.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); endpointProctor.release(); guard.release(); *toEnd = fromEnd + 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> inline void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFront( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { enum { IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, IS_BITWISEMOVEABLE = bslmf::IsBitwiseMoveable<VALUE_TYPE>::value, VALUE = IS_BITWISECOPYABLE ? BITWISE_COPYABLE_TRAITS : IS_BITWISEMOVEABLE ? BITWISE_MOVEABLE_TRAITS : NIL_TRAITS }; emplaceAndMoveToFrontDispatch( toBegin, fromBegin, position, allocator, (bslmf::MetaInt<VALUE> *)0, BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_COPYABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); *toBegin = fromBegin - 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<BITWISE_MOVEABLE_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { const size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; MoveGuard guard(begin, dest, frontSize, true); moveFront(&dest, &begin, frontSize); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); guard.release(); *toBegin = fromBegin - 1; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR, class... Args> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::emplaceAndMoveToFrontDispatch( Iterator *toBegin, Iterator fromBegin, Iterator position, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *, BSLS_COMPILERFEATURES_FORWARD_REF(Args)... arguments) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ElementGuard; typedef DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> EndpointProctor; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - 1; BSLS_ASSERT_SAFE(frontSize >= 1); ElementGuard guard(dest, dest, allocator); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), MoveUtil::move_if_noexcept(*begin)); guard.moveEnd(1); ++dest; ++begin; size_type n = 0; for (frontSize -= 1; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = MoveUtil::move_if_noexcept(*begin); ++n; } guard.moveEnd(n); bsl::allocator_traits<ALLOCATOR>::destroy(allocator, dest.valuePtr()); EndpointProctor endpointProctor(toBegin, position); bsl::allocator_traits<ALLOCATOR>::construct( allocator, dest.valuePtr(), BSLS_COMPILERFEATURES_FORWARD(Args, arguments)...); endpointProctor.release(); guard.release(); *toBegin = fromBegin - 1; } // }}} END GENERATED CODE #endif template <class VALUE_TYPE, int BLOCK_LENGTH> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::moveBack(Iterator *destination, Iterator *source, size_type numElements) { if (destination->offsetInBlock() > numElements && source->offsetInBlock() > numElements) { // There is enough room to move everything at once. *destination -= numElements; *source -= numElements; std::memmove((void *)destination->valuePtr(), source->valuePtr(), numElements * sizeof(VALUE_TYPE)); return; // RETURN } // Moving the blocks involving segments of 3 different lengths, as // illustrated below. We need to distinguish whether destination or the // source have more space remaining, and adjust the algorithm accordingly. //.. // [--- n ---] - segment 'n' // [--- n'---] - segment with equal length as 'n'. // [--- n ---I-- m --] - two segments, with length 'n' and 'm'. // - - - - - - - - // | | | | | | | | | - a block in the deque pointed by a 'blockPtr' // - - - - - - - - //.. // // Scenario 1: Source has less element than destination has space // ============================================================== // Under this scenario, we have to move all elements from the source block // to the destination block first (segment 1), then fill the destination // block with the remaining elements (segment 2). After, we alternate // between segments 3 and 2. //.. // [--- 3 ---I- 2'-] [- 1 -] [- 2 -I- 1'-] // - - - - - - - - - - - - - - - - - - - - - - - - // |d|e|f|g|h|i|j|k| |a|b|c|/| | | | | | | | | | | | | | // - - - - - - - - - - - - - - - - - - - - - - - - // ^ ^ // source ____| destination _____| //.. // // Scenario 2: Source has more elements than destination has space // ================================================================ // Under this scenario, we can only move some elements (the number of // elements that can fit in the destination block) from the source block to // the destination block first (segment 1), then move the remaining // elements (segment 2) from the source block. After, we alternate between // segments 3 and 2. //.. // [---- 3 ----] // [---- 3' ---] [-2-I- 1 -] [2' ] [- 1 -] // - - - - - - - - - - - - - - - - - - - - - - - - // |d|e|f|g|h|i|j|k| |a|b|c|d|e|/| | | | | | | | | | | | // - - - - - - - - - - - - - - - - - - - - - - - - // ^ ^ // source _____| destination _| // // 1) Copy segment 1 // 2) Copy segment 2 // 3) Copy segment 3 // 4) Repeat 2, 3 until there's less than 1 'BLOCK_LENGTH' left // 5) Copy the remaining items over //.. size_type firstSegment, secondSegment; if (source->offsetInBlock() > destination->offsetInBlock()) { firstSegment = destination->offsetInBlock(); secondSegment = source->offsetInBlock() - firstSegment; } else { firstSegment = source->offsetInBlock(); secondSegment = destination->offsetInBlock() - firstSegment; } size_type thirdSegment = BLOCK_LENGTH - secondSegment; *destination -= firstSegment; *source -= firstSegment; numElements -= firstSegment; std::memmove((void *)destination->valuePtr(), source->valuePtr(), firstSegment * sizeof(VALUE_TYPE)); for (; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) { *destination -= secondSegment; *source -= secondSegment; std::memmove((void *)destination->valuePtr(), source->valuePtr(), secondSegment * sizeof(VALUE_TYPE)); *destination -= thirdSegment; *source -= thirdSegment; std::memmove((void *)destination->valuePtr(), source->valuePtr(), thirdSegment * sizeof(VALUE_TYPE)); } size_type remaining = numElements > secondSegment ? secondSegment : numElements; *destination -= remaining; *source -= remaining; numElements -= remaining; std::memmove((void *)destination->valuePtr(), source->valuePtr(), remaining * sizeof(VALUE_TYPE)); *destination -= numElements; *source -= numElements; std::memmove((void *)destination->valuePtr(), source->valuePtr(), numElements * sizeof(VALUE_TYPE)); } template <class VALUE_TYPE, int BLOCK_LENGTH> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::moveFront(Iterator *destination, Iterator *source, size_type numElements) { if (destination->remainingInBlock() > numElements && source->remainingInBlock() > numElements) { // There is enough room to move everything at once std::memmove((void *)destination->valuePtr(), source->valuePtr(), numElements * sizeof(VALUE_TYPE)); *destination += numElements; *source += numElements; return; // RETURN } // Moving the blocks involving segments of 3 different lengths, as // illustrated below. We need to distinguish whether destination or the // source have more space remaining, and adjust the algorithm accordingly. //.. // [--- n ---] - segment 'n' // [--- n'---] - segment with equal length as 'n' // [--- n ---I-- m --] - two segments, with length 'n' and 'm'. // - - - - - - - - // | | | | | | | | | - a block in the deque pointed by a 'blockPtr' // - - - - - - - - //.. // // Scenario 1: Source has more elements than destination has space // =============================================================== // Under this scenario, we can only move some elements (the number of // elements that can fit in the destination block) from the source block to // the destination block first (segment 1), then move the remaining // elements (segment 2) from the source block. After, we alternate between // segments 3 and 2. //.. // [---- 3 ----] // [- 1 -] [ 2'] [- 1'-I-2-] [---- 3'----] // - - - - - - - - - - - - - - - - - - - - - - - - // | | | | | | | | | | | | |a|a|b|c|d| |e|f|g|h|i|j|k|l| // - - - - - - - - - - - - - - - - - - - - - - - - // ^ ^ // |_ destination |____ source //.. // // Scenario 2: Source has less elements than destination has space // =============================================================== // Under this scenario, we have to move all elements from the source block // to the destination block first (segment 1), then fill the destination // block with the remaining elements (segment 2). After, we alternate // between segments 3 and 2. //.. // [- 1'-I- 2 -] [--- 3'---I- 1 -] [- 2'-I--- 3 ---] // - - - - - - - - - - - - - - - - - - - - - - - - // | | | | | | | | | | | | | | |a|b|c| |d|e|f|g|h|i|j|k| // - - - - - - - - - - - - - - - - - - - - - - - - // ^ ^ // |_ destination |____ source // // 1) Copy segment 1 // 2) Copy segment 2 // 3) Copy segment 3 // 4) Repeat 2, 3 until there's less than 1 'BLOCK_LENGTH' left // 5) Copy the remaining items over //.. size_type firstSegment, secondSegment; if (source->remainingInBlock() > destination->remainingInBlock()) { firstSegment = destination->remainingInBlock(); secondSegment = source->remainingInBlock() - firstSegment; } else { firstSegment = source->remainingInBlock(); secondSegment = destination->remainingInBlock() - firstSegment; } size_type thirdSegment = BLOCK_LENGTH - secondSegment; std::memmove((void *)destination->valuePtr(), source->valuePtr(), firstSegment * sizeof(VALUE_TYPE)); *destination += firstSegment; *source += firstSegment; numElements -= firstSegment; for (; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) { std::memmove((void *)destination->valuePtr(), source->valuePtr(), secondSegment * sizeof(VALUE_TYPE)); *destination += secondSegment; *source += secondSegment; std::memmove((void *)destination->valuePtr(), source->valuePtr(), thirdSegment * sizeof(VALUE_TYPE)); *destination += thirdSegment; *source += thirdSegment; } size_type remaining = numElements > secondSegment ? secondSegment : numElements; std::memmove((void *)destination->valuePtr(), source->valuePtr(), remaining * sizeof(VALUE_TYPE)); *destination += remaining; *source += remaining; numElements -= remaining; std::memmove((void *)destination->valuePtr(), source->valuePtr(), numElements * sizeof(VALUE_TYPE)); *destination += numElements; *source += numElements; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::uninitializedFillNBack(Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { if (fromEnd.remainingInBlock() > numElements) { ArrayPrimitives::uninitializedFillN(fromEnd.valuePtr(), numElements, value, allocator); fromEnd += numElements; *toEnd = fromEnd; return; // RETURN } size_type firstRemaining = fromEnd.remainingInBlock(); ArrayPrimitives::uninitializedFillN(fromEnd.valuePtr(), firstRemaining, value, allocator); numElements -= firstRemaining; fromEnd += firstRemaining; *toEnd = fromEnd; for ( ; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) { ArrayPrimitives::uninitializedFillN(fromEnd.valuePtr(), BLOCK_LENGTH, value, allocator); fromEnd.nextBlock(); toEnd->nextBlock(); } ArrayPrimitives::uninitializedFillN(fromEnd.valuePtr(), numElements, value, allocator); fromEnd += numElements; *toEnd = fromEnd; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator) { if (fromEnd.remainingInBlock() > numElements) { ArrayPrimitives::defaultConstruct(fromEnd.valuePtr(), numElements, allocator); fromEnd += numElements; *toEnd = fromEnd; return; // RETURN } size_type firstRemaining = fromEnd.remainingInBlock(); ArrayPrimitives::defaultConstruct(fromEnd.valuePtr(), firstRemaining, allocator); numElements -= firstRemaining; fromEnd += firstRemaining; *toEnd = fromEnd; for ( ; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) { ArrayPrimitives::defaultConstruct(fromEnd.valuePtr(), BLOCK_LENGTH, allocator); fromEnd.nextBlock(); toEnd->nextBlock(); } ArrayPrimitives::defaultConstruct(fromEnd.valuePtr(), numElements, allocator); fromEnd += numElements; *toEnd = fromEnd; } template <class VALUE_TYPE, int BLOCK_LENGTH> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, BLOCK_LENGTH> ::uninitializedFillNFront(Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { if (fromBegin.offsetInBlock() > numElements) { fromBegin -= numElements; ArrayPrimitives::uninitializedFillN(fromBegin.valuePtr(), numElements, value, allocator); *toBegin = fromBegin; return; // RETURN } size_type firstRemaining = fromBegin.offsetInBlock(); fromBegin -= firstRemaining; numElements -= firstRemaining; ArrayPrimitives::uninitializedFillN(fromBegin.valuePtr(), firstRemaining, value, allocator); *toBegin = fromBegin; // in case of exception for ( ; numElements >= BLOCK_LENGTH; numElements -= BLOCK_LENGTH) { fromBegin.previousBlock(); ArrayPrimitives::uninitializedFillN(fromBegin.valuePtr(), BLOCK_LENGTH, value, allocator); *toBegin = fromBegin; } fromBegin -= numElements; ArrayPrimitives::uninitializedFillN(fromBegin.valuePtr(), numElements, value, allocator); *toBegin = fromBegin; } // ------------------------------------ // class DequePrimitives<VALUE_TYPE, 1> // ------------------------------------ // CLASS METHODS template <class VALUE_TYPE> template <class ALLOCATOR> typename DequePrimitives<VALUE_TYPE, 1>::Iterator DequePrimitives<VALUE_TYPE, 1>::erase(Iterator *toBegin, Iterator *toEnd, Iterator fromBegin, Iterator first, Iterator last, Iterator fromEnd, ALLOCATOR allocator) { size_type frontSize = first - fromBegin; size_type backSize = fromEnd - last; Iterator ret; if (frontSize < backSize) { ret = last; for (; 0 < frontSize; --frontSize) { --last; --first; *last = *first; } *toBegin = last; *toEnd = fromEnd; } else { ret = first; for (; 0 < backSize; --backSize, ++first, ++last) { *first = *last; } *toBegin = fromBegin; *toEnd = first; } destruct(first, last, allocator); return ret; } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::destruct(Iterator begin, Iterator end, ALLOCATOR allocator) { for (; !(begin == end); ++begin) { bsl::allocator_traits<ALLOCATOR>::destroy(allocator, begin.valuePtr()); } } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1> ::insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - numElements; size_type numDest; bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct(BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); ElementGuard guard(dest, dest, allocator); if (frontSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (frontSize -= numElements; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = *begin; } for (numDest = numElements; 0 < numDest; --numDest, ++dest) { *dest = space.object(); } } else { for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (numDest = numElements; frontSize < numDest; --numDest, ++dest) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), space.object()); guard.moveEnd(1); } for (; 0 < numDest; --numDest, ++dest) { *dest = space.object(); } } guard.release(); *toBegin = fromBegin - numElements; } template <class VALUE_TYPE> template <class FWD_ITER, class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1> ::insertAndMoveToFront(Iterator *toBegin, Iterator fromBegin, Iterator position, FWD_ITER first, FWD_ITER /*last*/, size_type numElements, ALLOCATOR allocator) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; size_type frontSize = position - fromBegin; Iterator begin = fromBegin; Iterator dest = begin - numElements; size_type numDest; ElementGuard guard(dest, dest, allocator); if (frontSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (frontSize -= numElements; 0 < frontSize; --frontSize, ++dest, ++begin) { *dest = *begin; } for (numDest = numElements; 0 < numDest; --numDest, ++dest, ++first) { *dest = *first; } } else { for (numDest = frontSize; 0 < numDest; --numDest, ++dest, ++begin) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *begin); guard.moveEnd(1); } for (numDest = numElements; frontSize < numDest; --numDest, ++dest, ++first) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *first); guard.moveEnd(1); } for (; 0 < numDest; --numDest, ++dest, ++first) { *dest = *first; } } guard.release(); *toBegin = fromBegin - numElements; } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::insertAndMoveToBack( Iterator *toEnd, Iterator fromEnd, Iterator position, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + numElements; size_type numDest; bsls::ObjectBuffer<VALUE_TYPE> space; bslma::ConstructionUtil::construct(BSLS_UTIL_ADDRESSOF(space.object()), bslma::Default::allocator(), value); bslma::DestructorProctor<VALUE_TYPE> temp(BSLS_UTIL_ADDRESSOF(space.object())); // TBD: this does the same thing as the old code - don't like that we // circumvent the whole allocator thing, but for now, let's keep it // consistent. // ConstructorProxy<VALUE_TYPE> // tempValue(value, bslma::Default::allocator()); ElementGuard guard(dest, dest, allocator); if (backSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (backSize -= numElements; 0 < backSize; --backSize) { --dest; --end; *dest = *end; } for (numDest = numElements; 0 < numDest; --numDest, ++position) { *position = space.object(); } } else { for (numDest = backSize; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (numDest = numElements; backSize < numDest; --numDest) { --dest; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), space.object()); guard.moveBegin(-1); } for (; 0 < numDest; --numDest, ++position) { *position = space.object(); } } guard.release(); *toEnd = fromEnd + numElements; } template <class VALUE_TYPE> template <class FWD_ITER, class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::insertAndMoveToBack(Iterator *toEnd, Iterator fromEnd, Iterator position, FWD_ITER first, FWD_ITER /*last*/, size_type numElements, ALLOCATOR allocator) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; size_type backSize = fromEnd - position; Iterator end = fromEnd; Iterator dest = end + numElements; size_type numDest; ElementGuard guard(dest, dest, allocator); if (backSize >= numElements) { for (numDest = numElements; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (numDest = backSize; numElements < numDest; --numDest) { --dest; --end; *dest = *end; } for (; 0 < numDest; ++first, ++position, --numDest) { *position = *first; } } else { for (numDest = backSize; 0 < numDest; --numDest) { --dest; --end; bsl::allocator_traits<ALLOCATOR>::construct(allocator, dest.valuePtr(), *end); guard.moveBegin(-1); } for (numDest = backSize; 0 < numDest; --numDest, ++position, ++first) { *position = *first; } ElementGuard guard2(position, position, allocator); for (numDest = numElements; backSize < numDest; ++first, ++position, --numDest) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, position.valuePtr(), *first); guard2.moveEnd(1); } guard2.release(); } guard.release(); *toEnd = fromEnd + numElements; } template <class VALUE_TYPE> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, 1>::uninitializedFillNFront( Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { enum { IS_FUNCTION_POINTER = bslmf::IsFunctionPointer<VALUE_TYPE>::value, IS_FUNDAMENTAL = bslmf::IsFundamental<VALUE_TYPE>::value, IS_POINTER = bslmf::IsPointer<VALUE_TYPE>::value, IS_FUNDAMENTAL_OR_POINTER = IS_FUNDAMENTAL || (IS_POINTER && !IS_FUNCTION_POINTER), IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, VALUE = IS_FUNDAMENTAL_OR_POINTER || IS_BITWISECOPYABLE ? NON_NIL_TRAITS : NIL_TRAITS }; uninitializedFillNFront(toBegin, fromBegin, numElements, value, allocator, (bslmf::MetaInt<VALUE>*)0); } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::uninitializedFillNFront( Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; ElementGuard guard(fromBegin, fromBegin, allocator); for (; 0 < numElements; --numElements) { --fromBegin; bsl::allocator_traits<ALLOCATOR>::construct(allocator, fromBegin.valuePtr(), value); guard.moveBegin(-1); } guard.release(); *toBegin = fromBegin; } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::uninitializedFillNFront( Iterator *toBegin, Iterator fromBegin, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NON_NIL_TRAITS> *) { *toBegin = fromBegin; // necessary in case 'numElements = 0' for ( ; 0 < numElements; --numElements) { --fromBegin; ArrayPrimitives::uninitializedFillN(fromBegin.valuePtr(), 1, value, allocator); *toBegin = fromBegin; // in case of exception } } template <class VALUE_TYPE> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, 1>::uninitializedFillNBack( Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator) { enum { IS_FUNCTION_POINTER = bslmf::IsFunctionPointer<VALUE_TYPE>::value, IS_FUNDAMENTAL = bslmf::IsFundamental<VALUE_TYPE>::value, IS_POINTER = bslmf::IsPointer<VALUE_TYPE>::value, IS_FUNDAMENTAL_OR_POINTER = IS_FUNDAMENTAL || (IS_POINTER && !IS_FUNCTION_POINTER), IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, VALUE = IS_FUNDAMENTAL_OR_POINTER || IS_BITWISECOPYABLE ? NON_NIL_TRAITS : NIL_TRAITS }; uninitializedFillNBack(toEnd, fromEnd, numElements, value, allocator, (bslmf::MetaInt<VALUE>*)0); } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::uninitializedFillNBack( Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; ElementGuard guard(fromEnd, fromEnd, allocator); for (; 0 < numElements; --numElements) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, fromEnd.valuePtr(), value); ++fromEnd; guard.moveEnd(1); } guard.release(); *toEnd = fromEnd; } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::uninitializedFillNBack( Iterator *toEnd, Iterator fromEnd, size_type numElements, const VALUE_TYPE& value, ALLOCATOR allocator, bslmf::MetaInt<NON_NIL_TRAITS> *) { *toEnd = fromEnd; // necessary in case 'numElements = 0' for ( ; 0 < numElements; --numElements) { ArrayPrimitives::uninitializedFillN(fromEnd.valuePtr(), 1, value, allocator); ++fromEnd; *toEnd = fromEnd; } } template <class VALUE_TYPE> template <class ALLOCATOR> inline void DequePrimitives<VALUE_TYPE, 1>::valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator) { enum { IS_FUNCTION_POINTER = bslmf::IsFunctionPointer<VALUE_TYPE>::value, IS_FUNDAMENTAL = bslmf::IsFundamental<VALUE_TYPE>::value, IS_POINTER = bslmf::IsPointer<VALUE_TYPE>::value, IS_FUNDAMENTAL_OR_POINTER = IS_FUNDAMENTAL || (IS_POINTER && !IS_FUNCTION_POINTER), IS_BITWISECOPYABLE = bsl::is_trivially_copyable<VALUE_TYPE>::value, VALUE = IS_FUNDAMENTAL_OR_POINTER || IS_BITWISECOPYABLE ? NON_NIL_TRAITS : NIL_TRAITS }; valueInititalizeN(toEnd, fromEnd, numElements, allocator, (bslmf::MetaInt<VALUE>*)0); } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::valueInititalizeN(Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator, bslmf::MetaInt<NIL_TRAITS> *) { typedef DequePrimitives_DequeElementGuard<VALUE_TYPE, 1, ALLOCATOR> ElementGuard; ElementGuard guard(fromEnd, fromEnd, allocator); for (; 0 < numElements; --numElements) { bsl::allocator_traits<ALLOCATOR>::construct(allocator, fromEnd.valuePtr()); ++fromEnd; guard.moveEnd(1); } guard.release(); *toEnd = fromEnd; } template <class VALUE_TYPE> template <class ALLOCATOR> void DequePrimitives<VALUE_TYPE, 1>::valueInititalizeN( Iterator *toEnd, Iterator fromEnd, size_type numElements, ALLOCATOR allocator, bslmf::MetaInt<NON_NIL_TRAITS> *) { *toEnd = fromEnd; // necessary in case 'numElements = 0' for ( ; 0 < numElements; --numElements) { ArrayPrimitives::defaultConstruct(fromEnd.valuePtr(), 1, allocator); ++fromEnd; *toEnd = fromEnd; } } // --------------------------------------- // class DequePrimitives_DequeElementGuard // --------------------------------------- // CREATORS template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::DequePrimitives_DequeElementGuard(const Iterator& begin, const Iterator& end, ALLOCATOR allocator) : d_begin(begin) , d_end(end) , d_allocator(allocator) { } template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::~DequePrimitives_DequeElementGuard() { DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::destruct(d_begin, d_end, d_allocator); } // MANIPULATORS template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline typename DequePrimitives_DequeElementGuard <VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>::Iterator& DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::moveBegin(std::ptrdiff_t offset) { d_begin += offset; return d_begin; } template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline typename DequePrimitives_DequeElementGuard <VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>::Iterator& DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::moveEnd(std::ptrdiff_t offset) { d_end += offset; return d_end; } template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline void DequePrimitives_DequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR>:: release() { d_begin = d_end; } // ----------------------------------------------- // class DequePrimitives_ExternalDequeElementGuard // ----------------------------------------------- // CREATORS template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::DequePrimitives_ExternalDequeElementGuard(Iterator *begin, Iterator *end, ALLOCATOR allocator) : d_begin_p(begin) , d_end_p(end) , d_allocator(allocator) { } template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::~DequePrimitives_ExternalDequeElementGuard() { if (d_begin_p != d_end_p) { DequePrimitives<VALUE_TYPE, BLOCK_LENGTH>::destruct(*d_begin_p, *d_end_p, d_allocator); } } // MANIPULATORS template <class VALUE_TYPE, int BLOCK_LENGTH, class ALLOCATOR> inline void DequePrimitives_ExternalDequeElementGuard<VALUE_TYPE, BLOCK_LENGTH, ALLOCATOR> ::release() { d_begin_p = d_end_p = 0; } // ------------------------------------ // class DequePrimitives_DequeMoveGuard // ------------------------------------ // CREATORS template <class VALUE_TYPE, int BLOCK_LENGTH> inline DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH> ::DequePrimitives_DequeMoveGuard(Iterator dest, Iterator src, std::size_t size, bool isFront) : d_destination_p(dest) , d_source_p(src) , d_size(size) , d_front(isFront) { } template <class VALUE_TYPE, int BLOCK_LENGTH> inline DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH> ::~DequePrimitives_DequeMoveGuard() { if (d_size != 0) { // We need to reverse 'moveFront'. if (d_front) { d_destination_p += d_size; d_source_p += d_size; DequePrimitives::moveBack(&d_destination_p, &d_source_p, d_size); } // We need to reverse 'moveBack'. else { d_destination_p -= d_size; d_source_p -= d_size; DequePrimitives::moveFront(&d_destination_p, &d_source_p, d_size); } } } // MANIPULATORS template <class VALUE_TYPE, int BLOCK_LENGTH> inline void DequePrimitives_DequeMoveGuard<VALUE_TYPE, BLOCK_LENGTH>::release() { d_size = 0; } // ------------------------------------------ // class DequePrimitives_DequeEndpointProctor // ------------------------------------------ // CREATORS template <class VALUE_TYPE, int BLOCK_LENGTH> inline DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> ::DequePrimitives_DequeEndpointProctor(Iterator *endpoint, Iterator position) : d_endpoint_p(endpoint) , d_position(position) { } template <class VALUE_TYPE, int BLOCK_LENGTH> inline DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH> ::~DequePrimitives_DequeEndpointProctor() { if (0 != d_endpoint_p) { *d_endpoint_p = d_position; } } // MANIPULATORS template <class VALUE_TYPE, int BLOCK_LENGTH> inline void DequePrimitives_DequeEndpointProctor<VALUE_TYPE, BLOCK_LENGTH>::release() { d_endpoint_p = 0; } } // close package namespace #ifndef BDE_OPENSOURCE_PUBLICATION // BACKWARD_COMPATIBILITY // ============================================================================ // BACKWARD COMPATIBILITY // ============================================================================ #ifdef bslalg_DequePrimitives #undef bslalg_DequePrimitives #endif #define bslalg_DequePrimitives bslalg::DequePrimitives // This alias is defined for backward compatibility. #endif // BDE_OPENSOURCE_PUBLICATION -- BACKWARD_COMPATIBILITY } // close enterprise namespace #else // if ! defined(DEFINED_BSLALG_DEQUEPRIMITIVES_H) # error Not valid except when included from bslalg_dequeprimitives.h #endif // ! defined(COMPILING_BSLALG_DEQUEPRIMITIVES_H) #endif // ! defined(INCLUDED_BSLALG_DEQUEPRIMITIVES_CPP03) // ---------------------------------------------------------------------------- // Copyright 2022 Bloomberg Finance L.P. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ----------------------------- END-OF-FILE ----------------------------------