| 128 | * code. |
| 129 | */ |
| 130 | template <std::size_t N> struct Bindings { |
| 131 | std::array<Tensor, N> data; |
| 132 | std::array<size_t, N> viewOffsets; |
| 133 | std::array<size_t, N> viewSpans; |
| 134 | Bindings(const std::initializer_list<Tensor> &init) { |
| 135 | std::copy(begin(init), end(init), begin(data)); |
| 136 | std::fill(begin(viewOffsets), end(viewOffsets), 0); |
| 137 | for (size_t i = 0; i < N; ++i) { |
| 138 | viewSpans[i] = data[i].data.size; |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | Bindings(const std::array<Tensor, N> &init) { |
| 143 | std::copy(begin(init), end(init), begin(data)); |
| 144 | std::fill(begin(viewOffsets), end(viewOffsets), 0); |
| 145 | for (size_t i = 0; i < N; ++i) { |
| 146 | viewSpans[i] = data[i].data.size; |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | Bindings(const std::initializer_list<TensorView> &init) { |
| 151 | size_t i = 0; |
| 152 | for (const auto &tv : init) { |
| 153 | data[i] = tv.data; |
| 154 | viewOffsets[i] = tv.offset; |
| 155 | viewSpans[i] = tv.span; |
| 156 | ++i; |
| 157 | } |
| 158 | } |
| 159 | |
| 160 | Bindings(const std::initializer_list<Array> &init) { |
| 161 | std::copy(begin(init), end(init), begin(data)); |
| 162 | std::fill(begin(viewOffsets), end(viewOffsets), 0); |
| 163 | for (size_t i = 0; i < N; ++i) { |
| 164 | viewSpans[i] = data[i].size; |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | Tensor &operator[](std::size_t index) { return data[index]; } |
| 169 | const Tensor &operator[](std::size_t index) const { return data[index]; } |
| 170 | }; |
| 171 | |
| 172 | /** |
| 173 | * @brief Deduction guide for Bindings |
nothing calls this directly
no outgoing calls
no test coverage detected