PicoScenes API Docs
 
Loading...
Searching...
No Matches
Intrinsics.hxx
Go to the documentation of this file.
1//
2// Created by 蒋志平 on 2024/8/31.
3//
4
5#ifndef FASTMEMCPY_HXX
6#define FASTMEMCPY_HXX
7
8#include <iterator>
9#include <type_traits>
10
11namespace Intrinsics {
12 void* fastMemcpy(void* destAddress, const void* sourceAddress, size_t numBytes2Copy);
13
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;
21 }
22
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);
28 }
29}
30
31#endif //FASTMEMCPY_HXX
OutputIterator fastCopyN(InputIterator first, std::size_t count, OutputIterator result)
OutputIterator fastCopy(InputIterator first, InputIterator last, OutputIterator result)
void * fastMemcpy(void *destAddress, const void *sourceAddress, size_t numBytes2Copy)