Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:21:57

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2021-2022 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 #pragma once
0009 
0010 // Project include(s).
0011 #include "traccc/definitions/qualifiers.hpp"
0012 
0013 namespace traccc {
0014 
0015 /**
0016  * @brief View class for an element in a header-vector container.
0017  *
0018  * In order to enforce certain invariants on the @c container header-vector
0019  * type, we access elements (which, of course, are product types of a header
0020  * and a vector) through this wrapper class. This class provides
0021  * low-overhead access to the struct-of-arrays container class to emulate an
0022  * array-of-structs architecture.
0023  *
0024  * @tparam header_reference_t The type of reference of the header object.
0025  * @tparam vector_reference_t The fully qualified vector reference type.
0026  */
0027 template <typename header_reference_t, typename vector_reference_t>
0028 struct container_element {
0029   /// Header reference type
0030   using header_reference = header_reference_t;
0031   /// Vector reference type
0032   using vector_reference = vector_reference_t;
0033 
0034   /**
0035    * @brief Construct a new container element view.
0036    *
0037    * This constructor is extremely trivial, as it simply takes a reference
0038    * to a header, a reference to a vector, and saves them in this object's
0039    * internal state.
0040    *
0041    * @param[in] h The header object reference.
0042    * @param[in] v The vector object reference.
0043    */
0044   TRACCC_HOST_DEVICE
0045   container_element(header_reference h, vector_reference v)
0046       : header(h), items(v) {}
0047 
0048   header_reference header;
0049   vector_reference items;
0050 };  // struct container_element
0051 
0052 }  // namespace traccc