File indexing completed on 2026-07-26 08:21:57
0001
0002
0003
0004
0005
0006
0007
0008 #pragma once
0009
0010
0011 #include "traccc/definitions/qualifiers.hpp"
0012 #include "traccc/edm/details/container_base.hpp"
0013
0014
0015 #include <vecmem/containers/jagged_vector.hpp>
0016 #include <vecmem/containers/vector.hpp>
0017
0018
0019 #include <cassert>
0020
0021 namespace traccc {
0022
0023
0024 template <typename header_t, typename item_t>
0025 class host_container : public container_base<header_t, item_t, vecmem::vector,
0026 vecmem::jagged_vector> {
0027 public:
0028
0029 using base_type =
0030 container_base<header_t, item_t, vecmem::vector, vecmem::jagged_vector>;
0031
0032
0033 using base_type::base_type;
0034
0035
0036
0037
0038 TRACCC_HOST
0039 typename base_type::element_view at(typename base_type::size_type i) {
0040 return {this->m_headers.at(i), this->m_items.at(i)};
0041 }
0042
0043
0044
0045
0046 TRACCC_HOST
0047 typename base_type::const_element_view at(
0048 typename base_type::size_type i) const {
0049 return {this->m_headers.at(i), this->m_items.at(i)};
0050 }
0051
0052
0053
0054
0055 TRACCC_HOST
0056 typename base_type::item_type& at(const typename base_type::link_type& link) {
0057 return this->m_items.at(link.first).at(link.second);
0058 }
0059
0060
0061
0062
0063 TRACCC_HOST
0064 const typename base_type::item_type& at(
0065 const typename base_type::link_type& link) const {
0066 return this->m_items.at(link.first).at(link.second);
0067 }
0068
0069
0070
0071
0072 TRACCC_HOST
0073 typename base_type::element_view operator[](typename base_type::size_type i) {
0074 return {this->m_headers[i], this->m_items[i]};
0075 }
0076
0077
0078
0079
0080 TRACCC_HOST
0081 typename base_type::const_element_view operator[](
0082 typename base_type::size_type i) const {
0083 return {this->m_headers[i], this->m_items[i]};
0084 }
0085
0086
0087
0088
0089 TRACCC_HOST
0090 typename base_type::item_type& operator[](
0091 const typename base_type::link_type& link) {
0092 return this->m_items[link.first][link.second];
0093 }
0094
0095
0096
0097
0098 TRACCC_HOST
0099 const typename base_type::item_type& operator[](
0100 const typename base_type::link_type& link) const {
0101 return this->m_items[link.first][link.second];
0102 }
0103
0104
0105
0106
0107
0108
0109
0110 TRACCC_HOST
0111 typename base_type::size_type size(void) const {
0112 assert(this->m_headers.size() == this->m_items.size());
0113 return this->m_headers.size();
0114 }
0115
0116
0117
0118
0119 TRACCC_HOST
0120 void reserve(typename base_type::size_type s) {
0121 this->m_headers.reserve(s);
0122 this->m_items.reserve(s);
0123 }
0124
0125
0126
0127
0128 TRACCC_HOST
0129 void resize(typename base_type::size_type s) {
0130 this->m_headers.resize(s);
0131 this->m_items.resize(s);
0132 }
0133
0134
0135
0136
0137 template <typename h_prime, typename v_prime>
0138 TRACCC_HOST void push_back(h_prime&& new_header, v_prime&& new_items) {
0139 this->m_headers.push_back(std::forward<h_prime>(new_header));
0140 this->m_items.push_back(std::forward<v_prime>(new_items));
0141 }
0142
0143
0144
0145
0146 TRACCC_HOST
0147 typename base_type::size_type total_size() const {
0148 typename base_type::size_type ret = 0;
0149 for (const typename base_type::item_vector::value_type& item :
0150 this->m_items) {
0151 ret += item.size();
0152 }
0153 return ret;
0154 }
0155
0156 };
0157
0158 }