OpenKalman
index.hpp
Go to the documentation of this file.
1 /* This file is part of OpenKalman, a header-only C++ library for
2  * Kalman filters and other recursive filters.
3  *
4  * Copyright (c) 2024 Christopher Lee Ogden <ogden@gatech.edu>
5  *
6  * This Source Code Form is subject to the terms of the Mozilla Public
7  * License, v. 2.0. If a copy of the MPL was not distributed with this
8  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
9  */
10 
16 #ifndef OPENKALMAN_VALUE_INDEX_HPP
17 #define OPENKALMAN_VALUE_INDEX_HPP
18 
19 #include <type_traits>
22 #include "integral.hpp"
23 
24 namespace OpenKalman::values
25 {
26 #ifndef __cpp_concepts
27  namespace detail
28  {
29  template<typename T, typename = void>
30  struct number_type_is_unsigned : std::false_type {};
31 
32 
33  template<typename T>
34  struct number_type_is_unsigned<T, std::enable_if_t<std::is_unsigned_v<values::number_type_of_t<T>>>>
35  : std::true_type {};
36 
37 
38  template<typename T, typename = void>
39  struct fixed_integral_gt_0 : std::false_type {};
40 
41 
42  template<typename T>
43  struct fixed_integral_gt_0<T, std::enable_if_t<(values::fixed_number_of<T>::value >= 0)>> : std::true_type {};
44  }
45 #endif
46 
47 
51 #ifdef __cpp_concepts
52  template<typename T>
53  concept index = values::integral<T> and (std::is_unsigned_v<number_type_of_t<T>> or fixed_number_of<T>::value >= 0);
54 #else
55  template<typename T>
56  constexpr bool index = values::integral<T> and (detail::number_type_is_unsigned<T>::value or detail::fixed_integral_gt_0<T>::value);
57 #endif
58 
59 } // namespace OpenKalman::values
60 
61 #endif //OPENKALMAN_VALUE_INDEX_HPP
Definition for values::fixed_number_of.
Definition: tuple_reverse.hpp:103
Definition for value:number_type_of_t.
The fixed number associated with a values::fixed.
Definition: fixed_number_of.hpp:45
Definition for values::abs.
Definition: constant_coefficient.hpp:25
Definition for values::integral.
constexpr bool index
T is an index value.
Definition: index.hpp:56
std::decay_t< decltype(values::to_number(std::declval< T >()))> number_type_of_t
Obtain the values::number type associated with avalues::value.
Definition: number_type_of_t.hpp:34