/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
DataFormats/Portable/interface/PortableCollectionCommon.h
52 строки
2 KB
markus
Extended nested blocks deep copy test
31 июл 2026, 16:13
31 июл 2026, 16:13
b8fbf4d
Код
Авторство
О чём код?
#ifndef DataFormats_Portable_interface_PortableCollectionCommon_h #define DataFormats_Portable_interface_PortableCollectionCommon_h #include <format> #include <limits> #include <stdexcept> #include <typeinfo> #include <alpaka/alpaka.hpp> #include "FWCore/Utilities/interface/TypeDemangler.h" namespace portablecollection { template <std::size_t I = 0, typename TQueue, typename Descriptor, typename ConstDescriptor> requires requires { Descriptor::num_cols; } void deepCopy(TQueue& queue, Descriptor& dest, ConstDescriptor const& src) { if constexpr (I < ConstDescriptor::num_cols) { assert(std::get<I>(dest.buff).size_bytes() == std::get<I>(src.buff).size_bytes()); alpaka::memcpy( queue, alpaka::createView(alpaka::getDev(queue), std::get<I>(dest.buff).data(), std::get<I>(dest.buff).size()), alpaka::createView(alpaka::getDev(queue), std::get<I>(src.buff).data(), std::get<I>(src.buff).size())); deepCopy<I + 1>(queue, dest, src); } } // Helper function implementing the recursive deep copy for blocks template <std::size_t I = 0, typename TQueue, typename Descriptor, typename ConstDescriptor> requires requires { Descriptor::blocksNumber; } void deepCopy(TQueue& queue, Descriptor& dest, ConstDescriptor const& src) { if constexpr (I < ConstDescriptor::blocksNumber) { deepCopy(queue, std::get<I>(dest.buff), std::get<I>(src.buff)); deepCopy<I + 1>(queue, dest, src); } } template <std::integral Int> constexpr int size_cast(Int input) { if ((std::is_signed_v<Int> && input < 0) || input > std::numeric_limits<int>::max()) { throw std::runtime_error( std::format("Invalid input value for size of PortableCollection: cannot be narrowed to positive int32. " "Source type: {}, value: {} ", edm::typeDemangle(typeid(Int).name()), input)); } return static_cast<int>(input); } } // namespace portablecollection #endif // DataFormats_Portable_interface_PortableCollectionCommon_h