Back to home page

EIC code displayed by LXR

 
 

    


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

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 
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 }