6 #ifndef EASTL_INTERNAL_COPY_HELP_H
7 #define EASTL_INTERNAL_COPY_HELP_H
9 #include <EASTL/internal/config.h>
11 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
15 #include <EASTL/type_traits.h>
16 #include <EASTL/iterator.h>
48 template <
typename ,
bool ,
bool >
51 template <
typename InputIterator,
typename OutputIterator>
52 static OutputIterator move_or_copy(InputIterator first, InputIterator last, OutputIterator result)
54 for(; first != last; ++result, ++first)
66 template <
typename InputIterator,
typename OutputIterator>
67 static OutputIterator move_or_copy(InputIterator first, InputIterator last, OutputIterator result)
69 typedef typename eastl::iterator_traits<InputIterator>::difference_type difference_type;
71 for(difference_type n = (last - first); n > 0; --n, ++first, ++result)
79 template <
typename InputIteratorCategory>
82 template <
typename InputIterator,
typename OutputIterator>
83 static OutputIterator move_or_copy(InputIterator first, InputIterator last, OutputIterator result)
85 for(; first != last; ++result, ++first)
95 template <
typename InputIterator,
typename OutputIterator>
96 static OutputIterator move_or_copy(InputIterator first, InputIterator last, OutputIterator result)
98 typedef typename eastl::iterator_traits<InputIterator>::difference_type difference_type;
100 for(difference_type n = (last - first); n > 0; --n, ++first, ++result)
108 template <
bool isMove>
111 template <
typename T>
112 static T* move_or_copy(
const T* first,
const T* last, T* result)
114 if (EASTL_UNLIKELY(first == last))
118 return (T*)__builtin_memmove(result, first, (
size_t)((uintptr_t)last - (uintptr_t)first)) + (last - first);
124 template <
bool isMove,
typename InputIterator,
typename OutputIterator>
125 inline OutputIterator move_and_copy_chooser(InputIterator first, InputIterator last, OutputIterator result)
127 typedef typename eastl::iterator_traits<InputIterator>::iterator_category IIC;
128 typedef typename eastl::iterator_traits<OutputIterator>::iterator_category OIC;
129 typedef typename eastl::iterator_traits<InputIterator>::value_type value_type_input;
130 typedef typename eastl::iterator_traits<OutputIterator>::value_type value_type_output;
142 template <
bool isMove,
typename InputIterator,
typename OutputIterator>
143 inline OutputIterator move_and_copy_unwrapper(InputIterator first, InputIterator last, OutputIterator result)
145 return OutputIterator(eastl::move_and_copy_chooser<isMove>(eastl::unwrap_iterator(first), eastl::unwrap_iterator(last), eastl::unwrap_iterator(result)));
169 template <
typename InputIterator,
typename OutputIterator>
170 inline OutputIterator
move(InputIterator first, InputIterator last, OutputIterator result)
172 return eastl::move_and_copy_unwrapper<true>(eastl::unwrap_iterator(first), eastl::unwrap_iterator(last), result);
190 template <
typename InputIterator,
typename OutputIterator>
191 inline OutputIterator
copy(InputIterator first, InputIterator last, OutputIterator result)
195 return eastl::move_and_copy_unwrapper<isMove>(eastl::unwrap_iterator(first), eastl::unwrap_iterator(last), result);
EA Standard Template Library.
Definition: algorithm.h:288
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result)
Definition: copy_help.h:191
OutputIterator move(InputIterator first, InputIterator last, OutputIterator result)
Definition: copy_help.h:170
Definition: iterator.h:583
Definition: type_compound.h:258
Definition: type_traits.h:604
Definition: type_pod.h:708
Definition: copy_help.h:50
Definition: iterator.h:77