File indexing completed on 2025-09-17 08:54:12
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <cstddef>
0010
0011 #include <covfie/core/array.hpp>
0012
0013 namespace covfie::vector {
0014 template <typename _type, std::size_t _size>
0015 struct vector_d {
0016 using type = _type;
0017 static constexpr std::size_t size = _size;
0018 };
0019
0020 template <typename _vector_d>
0021 struct array_vector_d {
0022 using vector_d = _vector_d;
0023 using scalar_t = typename vector_d::type;
0024 static constexpr std::size_t dimensions = vector_d::size;
0025 using vector_t = array::array<typename vector_d::type, vector_d::size>;
0026 };
0027
0028 template <typename _vector_d>
0029 struct array_reference_vector_d {
0030 using vector_d = _vector_d;
0031 using scalar_t = typename vector_d::type;
0032 static constexpr std::size_t dimensions = vector_d::size;
0033 using vector_t = std::add_lvalue_reference_t<
0034 array::array<typename vector_d::type, vector_d::size>>;
0035 };
0036
0037 template <typename _vector_d>
0038 struct scalar_d {
0039 static_assert(
0040 _vector_d::size == 1,
0041 "Scalar type is only usable with vectors of size 1."
0042 );
0043
0044 using vector_d = _vector_d;
0045 using scalar_t = typename vector_d::type;
0046 static constexpr std::size_t dimensions = vector_d::size;
0047 using vector_t = scalar_t;
0048 };
0049
0050 using float1 = vector_d<float, 1>;
0051 using float2 = vector_d<float, 2>;
0052 using float3 = vector_d<float, 3>;
0053 using float4 = vector_d<float, 4>;
0054
0055 using double1 = vector_d<double, 1>;
0056 using double2 = vector_d<double, 2>;
0057 using double3 = vector_d<double, 3>;
0058 using double4 = vector_d<double, 4>;
0059
0060 using int1 = vector_d<int, 1>;
0061 using int2 = vector_d<int, 2>;
0062 using int3 = vector_d<int, 3>;
0063 using int4 = vector_d<int, 4>;
0064
0065 using uint1 = vector_d<unsigned int, 1>;
0066 using uint2 = vector_d<unsigned int, 2>;
0067 using uint3 = vector_d<unsigned int, 3>;
0068 using uint4 = vector_d<unsigned int, 4>;
0069
0070 using long1 = vector_d<long, 1>;
0071 using long2 = vector_d<long, 2>;
0072 using long3 = vector_d<long, 3>;
0073 using long4 = vector_d<long, 4>;
0074
0075 using ulong1 = vector_d<unsigned long, 1>;
0076 using ulong2 = vector_d<unsigned long, 2>;
0077 using ulong3 = vector_d<unsigned long, 3>;
0078 using ulong4 = vector_d<unsigned long, 4>;
0079
0080 using size1 = vector_d<std::size_t, 1>;
0081 using size2 = vector_d<std::size_t, 2>;
0082 using size3 = vector_d<std::size_t, 3>;
0083 using size4 = vector_d<std::size_t, 4>;
0084 }