12 void*
fastMemcpy(
void* destAddress,
const void* sourceAddress,
size_t numBytes2Copy);
14 template<
typename InputIterator,
typename OutputIterator,
15 typename = std::enable_if_t<std::is_trivially_copyable_v<typename std::iterator_traits<InputIterator>::value_type>>,
16 typename = std::enable_if_t<std::is_same_v<typename std::iterator_traits<OutputIterator>::iterator_category, std::random_access_iterator_tag>>>
17 OutputIterator
fastCopyN(InputIterator first, std::size_t count, OutputIterator result) {
18 using ValueType =
typename std::iterator_traits<InputIterator>::value_type;
19 fastMemcpy(&*result, &*first, count *
sizeof(ValueType));
20 return result + count;
23 template<
typename InputIterator,
typename OutputIterator,
24 typename = std::enable_if_t<std::is_trivially_copyable_v<typename std::iterator_traits<InputIterator>::value_type>>,
25 typename = std::enable_if_t<std::is_same_v<typename std::iterator_traits<OutputIterator>::iterator_category, std::random_access_iterator_tag>>>
26 OutputIterator
fastCopy(InputIterator first, InputIterator last, OutputIterator result) {
27 return fastCopyN(first, last - first, result);