File indexing completed on 2025-09-17 08:54:10
0001
0002
0003
0004
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 }