1 #ifndef canvas_Persistency_Common_FindMany_h 2 #define canvas_Persistency_Common_FindMany_h 132 #include <initializer_list> 139 template <
typename ProdB,
typename DATA =
void>
143 template <
typename ProdB>
149 template <
typename ProdB>
153 #ifdef ART_IPR_BY_PTR 154 using bColl_t = std::vector<std::vector<Ptr<ProdB>>>;
156 using bColl_t = std::vector<std::vector<ProdB const*>>;
166 template <
typename Handle,
typename DataContainer,
typename Tag>
168 DataContainer
const& dc,
172 template <
typename ProdAColl,
typename DataContainer,
typename Tag>
174 DataContainer
const& dc,
176 std::enable_if_t<std::is_pointer_v<typename ProdAColl::value_type>>* =
179 template <
typename PtrProdAColl,
typename DataContainer,
typename Tag>
180 FindMany(PtrProdAColl
const& aPtrColl,
181 DataContainer
const& dc,
183 std::enable_if_t<std::is_same_v<
184 typename PtrProdAColl::value_type,
187 template <
typename ProdA,
typename DataContainer,
typename Tag>
189 DataContainer
const& dc,
193 bool isValid()
const;
209 void setStoredException(std::shared_ptr<art::Exception const>&&
e);
210 void throwIfInvalid()
const;
214 std::shared_ptr<art::Exception const> storedException_{
nullptr};
217 template <
typename ProdB,
typename Data>
237 template <
typename Handle,
typename DataContainer,
typename Tag>
239 DataContainer
const& dc,
243 template <
typename ProdAColl,
typename DataContainer,
typename Tag>
245 DataContainer
const& dc,
247 std::enable_if_t<std::is_pointer_v<typename ProdAColl::value_type>>* =
250 template <
typename PtrProdAColl,
typename DataContainer,
typename Tag>
251 FindMany(PtrProdAColl
const& aPtrColl,
252 DataContainer
const& dc,
254 std::enable_if_t<std::is_same_v<
255 typename PtrProdAColl::value_type,
258 template <
typename ProdA,
typename DataContainer,
typename Tag>
260 DataContainer
const& dc,
282 template <
typename ProdB>
283 template <
typename Handle,
typename DataContainer,
typename Tag>
285 DataContainer
const& dc,
289 using ProdA =
typename Handle::element_type::value_type;
291 dc, detail::input_tag<ProdA, ProdB, void>(
tag)};
292 storedException_ = finder(*aCollection, bCollection_);
295 template <
typename ProdB>
296 template <
typename ProdAColl,
typename DataContainer,
typename Tag>
298 DataContainer
const& dc,
300 std::enable_if_t<std::is_pointer_v<typename ProdAColl::value_type>>*)
303 std::remove_const_t<std::remove_pointer_t<typename ProdAColl::value_type>>;
305 dc, detail::input_tag<ProdA, ProdB, void>(
tag)};
306 storedException_ = finder(view, bCollection_);
309 template <
typename ProdB>
310 template <
typename PtrProdAColl,
typename DataContainer,
typename Tag>
312 DataContainer
const& dc,
315 std::is_same_v<
typename PtrProdAColl::value_type,
318 using ProdA =
typename PtrProdAColl::value_type::value_type;
320 dc, detail::input_tag<ProdA, ProdB, void>(
tag)};
321 storedException_ = finder(aPtrColl, bCollection_);
324 template <
typename ProdB>
325 template <
typename ProdA,
typename DataContainer,
typename Tag>
327 DataContainer
const& dc,
331 dc, detail::input_tag<ProdA, ProdB, void>(
tag)};
332 storedException_ = finder(ptrs, bCollection_);
335 template <
typename ProdB>
339 return bCollection_.size();
342 template <
typename ProdB>
345 return (storedException_.get() ==
nullptr);
348 template <
typename ProdB>
353 return bCollection_.at(
i);
356 template <
typename ProdB>
361 item.insert(item.end(), ref.begin(), ref.end());
365 template <
typename ProdB>
372 template <
typename ProdB>
375 storedException_ = std::move(
e);
378 template <
typename ProdB>
384 <<
"Attempt to use a FindMany where the underlying " 385 "art::Assns product was not found.";
391 template <
typename ProdB,
typename Data>
392 template <
typename Handle,
typename DataContainer,
typename Tag>
394 DataContainer
const& dc,
398 using ProdA =
typename Handle::element_type::value_type;
400 dc, detail::input_tag<ProdA, ProdB, void>(
tag)};
405 template <
typename ProdB,
typename Data>
406 template <
typename ProdAColl,
typename DataContainer,
typename Tag>
408 DataContainer
const& dc,
410 std::enable_if_t<std::is_pointer_v<typename ProdAColl::value_type>>*)
413 std::remove_const_t<std::remove_pointer_t<typename ProdAColl::value_type>>;
415 dc, detail::input_tag<ProdA, ProdB, void>(
tag)};
419 template <
typename ProdB,
typename Data>
420 template <
typename PtrProdAColl,
typename DataContainer,
typename Tag>
422 DataContainer
const& dc,
425 std::is_same_v<
typename PtrProdAColl::value_type,
428 using ProdA =
typename PtrProdAColl::value_type::value_type;
430 dc, detail::input_tag<ProdA, ProdB, Data>(
tag)};
435 template <
typename ProdB,
typename Data>
436 template <
typename ProdA,
typename DataContainer,
typename Tag>
438 std::initializer_list<
Ptr<ProdA>>
const& ptrs,
439 DataContainer
const& dc,
443 dc, detail::input_tag<ProdA, ProdB, Data>(
tag)};
447 template <
typename ProdB,
typename Data>
454 template <
typename ProdB,
typename Data>
461 data.insert(
data.end(), ref.begin(), ref.end());
466 template <
typename ProdB,
typename Data>
473 #undef ART_IPR_BY_PTR
typename base::const_reference const_reference
size_type get(size_type i, reference item) const
typename base::assoc_t assoc_t
typename dataColl_t::const_pointer data_const_pointer
size_type get(size_type i, reference item, data_reference data) const
typename base::reference reference
typename bColl_t::size_type size_type
typename bColl_t::difference_type difference_type
bool operator==(FindMany< ProdB, Data > const &other) const
typename dataColl_t::reference data_reference
std::vector< std::vector< ProdB const * >> bColl_t
const XML_Char const XML_Char * data
dataColl_t dataCollection_
typename base::size_type size_type
typename bColl_t::reference reference
bool operator==(FindMany< ProdB, void > const &other) const
typename bColl_t::const_reference const_reference
typename base::difference_type difference_type
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
void setStoredException(std::shared_ptr< art::Exception const > &&e)
typename base::value_type value_type
std::vector< std::vector< Data const * >> dataColl_t
typename bColl_t::value_type value_type
Service to store calibration data products (CDP) in the SQLite3 metadatabase of a file...
void throwIfInvalid() const
const_reference at(size_type i) const
typedef void(XMLCALL *XML_ElementDeclHandler)(void *userData
FindMany(Handle const &aCollection, DataContainer const &dc, Tag const &tag, std::enable_if_t< detail::is_handle< Handle >::value > *=nullptr)
data_const_reference data(size_type i) const
typename dataColl_t::const_reference data_const_reference