1 #ifndef Framework_produce_helpers_h
2 #define Framework_produce_helpers_h
26 namespace edm::eventsetup {
32 template <
typename FromT,
typename ToT>
37 template <
typename FromT,
typename ToT>
38 void moveFromTo(std::unique_ptr<FromT>& iFrom, ToT& iTo) {
41 template <
typename FromT,
typename ToT>
51 (not std::is_pointer_v<T>),
52 "use std::shared_ptr or std::unique_ptr to hold EventSetup data products, do not use bare pointers");
89 using type =
typename T::element_type;
90 static auto getPointer(
T const& iPtr) -> decltype(&*iPtr) {
return &*iPtr; }
96 static auto getPointer(std::unique_ptr<const T>
const& iPtr) -> decltype(&*iPtr) {
return &*iPtr; }
102 static auto getPointer(std::shared_ptr<const T>
const& iPtr) -> decltype(&*iPtr) {
return &*iPtr; }
105 template <
typename T>
109 if (iPtr.has_value()) {
116 template <
typename T,
typename FindT>
119 template <
typename HeadT,
typename TailT>
121 if constexpr (not std::is_same_v<TailT, FindT>) {
123 return findIndexOf<typename container_type::head_type, typename container_type::tail_type>() + 1;
129 findIndexOf<typename container_type::head_type, typename container_type::tail_type>();
132 template <
typename T>
133 const char*
name(
const T*);
typename product_traits< T >::type container_type
typename T::element_type type
const char * name(const T *)
static T const * getPointer(std::optional< T > const &iPtr)
static auto getPointer(T const &iPtr) -> decltype(&*iPtr)
std::unique_ptr< T, impl::DeviceDeleter > unique_ptr
static constexpr int value
void moveFromTo(FromT &iFrom, ToT &iTo)
static auto getPointer(std::unique_ptr< const T > const &iPtr) -> decltype(&*iPtr)
static constexpr int findIndexOf()
static constexpr int value
static auto getPointer(std::shared_ptr< const T > const &iPtr) -> decltype(&*iPtr)
typename product_traits< T >::type type