Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 08:54:10

0001 /*
0002  * SPDX-PackageName: "covfie, a part of the ACTS project"
0003  * SPDX-FileCopyrightText: 2022 CERN
0004  * SPDX-License-Identifier: MPL-2.0
0005  */
0006 
0007 #pragma once
0008 
0009 #include <cstddef>
0010 #include <initializer_list>
0011 #include <type_traits>
0012 #include <utility>
0013 
0014 #include <covfie/core/algebra/matrix.hpp>
0015 #include <covfie/core/array.hpp>
0016 #include <covfie/core/qualifiers.hpp>
0017 
0018 namespace covfie::algebra {
0019 template <std::size_t N, typename T = float, typename I = std::size_t>
0020 struct vector : public matrix<N, 1, T, I> {
0021     COVFIE_HOST_DEVICE vector()
0022         : matrix<N, 1, T, I>()
0023     {
0024     }
0025 
0026     COVFIE_HOST_DEVICE vector(array::array<T, N> l)
0027         : matrix<N, 1, T, I>()
0028     {
0029         for (I i = 0; i < N; ++i) {
0030             matrix<N, 1, T, I>::operator()(i, 0) = l[i];
0031         }
0032     }
0033 
0034     COVFIE_HOST_DEVICE vector(const matrix<N, 1, T, I> & o)
0035         : matrix<N, 1, T, I>(o)
0036     {
0037     }
0038 
0039     template <typename... Args>
0040     requires(
0041         (std::is_scalar_v<Args> && ...) &&
0042         (std::is_convertible_v<Args, T> && ...) && sizeof...(Args) == N
0043     ) COVFIE_HOST_DEVICE vector(Args... args)
0044         : vector(array::array<T, N>{std::forward<Args>(args)...})
0045     {
0046     }
0047 
0048     COVFIE_HOST_DEVICE T operator()(const I & i) const
0049     {
0050         return matrix<N, 1, T, I>::operator()(i, 0);
0051     }
0052 
0053     COVFIE_HOST_DEVICE T & operator()(const I & i)
0054     {
0055         return matrix<N, 1, T, I>::operator()(i, 0);
0056     }
0057 };
0058 }