10 #ifndef EIGEN_INTEGRAL_CONSTANT_H 11 #define EIGEN_INTEGRAL_CONSTANT_H 14 #include "../InternalHeaderCheck.h" 23 class VariableAndFixedInt;
57 static constexpr
int value = N;
58 constexpr
operator int()
const {
return N; }
60 constexpr FixedInt() =
default;
61 constexpr FixedInt(std::integral_constant<int, N>) {}
63 constexpr FixedInt(VariableAndFixedInt<N> other) {
64 #ifndef EIGEN_INTERNAL_DEBUGGING 65 EIGEN_UNUSED_VARIABLE(other);
67 eigen_internal_assert(
int(other) == N);
70 constexpr FixedInt<-N> operator-()
const {
return FixedInt<-N>(); }
73 constexpr FixedInt<N + M> operator+(FixedInt<M>)
const {
74 return FixedInt<N + M>();
78 constexpr FixedInt<N - M> operator-(FixedInt<M>)
const {
79 return FixedInt<N - M>();
83 constexpr FixedInt<N * M>
operator*(FixedInt<M>)
const {
84 return FixedInt<N * M>();
88 constexpr FixedInt<N / M> operator/(FixedInt<M>)
const {
89 return FixedInt<N / M>();
93 constexpr FixedInt<N % M> operator%(FixedInt<M>)
const {
94 return FixedInt<N % M>();
98 constexpr FixedInt<N | M> operator|(FixedInt<M>)
const {
99 return FixedInt<N | M>();
103 constexpr FixedInt<N & M> operator&(FixedInt<M>)
const {
104 return FixedInt<N & M>();
108 constexpr FixedInt operator()()
const {
return *
this; }
110 constexpr VariableAndFixedInt<N> operator()(
int val)
const {
return VariableAndFixedInt<N>(val); }
144 class VariableAndFixedInt {
146 static const int value = N;
147 operator int()
const {
return m_value; }
148 VariableAndFixedInt(
int val) { m_value = val; }
154 template <
typename T,
int Default = Dynamic>
155 struct get_fixed_value {
156 static const int value = Default;
159 template <
int N,
int Default>
160 struct get_fixed_value<FixedInt<N>, Default> {
161 static const int value = N;
164 template <
int N,
int Default>
165 struct get_fixed_value<VariableAndFixedInt<N>, Default> {
166 static const int value = N;
169 template <
typename T,
int N,
int Default>
170 struct get_fixed_value<variable_if_dynamic<T, N>, Default> {
171 static const int value = N;
174 template <
typename T>
175 EIGEN_DEVICE_FUNC
Index get_runtime_value(
const T &x) {
182 template <
typename T,
int DynamicKey = Dynamic,
typename EnableIf =
void>
183 struct cleanup_index_type {
188 template <
typename T,
int DynamicKey>
189 struct cleanup_index_type<T, DynamicKey,
std::enable_if_t<internal::is_integral<T>::value>> {
194 template <
int N,
int DynamicKey>
195 struct cleanup_index_type<VariableAndFixedInt<N>, DynamicKey> {
196 typedef FixedInt<N> type;
199 template <
int DynamicKey>
200 struct cleanup_index_type<VariableAndFixedInt<DynamicKey>, DynamicKey> {
204 template <
int N,
int DynamicKey>
205 struct cleanup_index_type<
std::integral_constant<int, N>, DynamicKey> {
206 typedef FixedInt<N> type;
211 #ifndef EIGEN_PARSED_BY_DOXYGEN 214 constexpr internal::FixedInt<N>
fix{};
216 #else // EIGEN_PARSED_BY_DOXYGEN 241 static const auto fix();
273 static const auto fix(
int val);
275 #endif // EIGEN_PARSED_BY_DOXYGEN 279 #endif // EIGEN_INTEGRAL_CONSTANT_H const Product< MatrixDerived, PermutationDerived, DefaultProduct > operator*(const MatrixBase< MatrixDerived > &matrix, const PermutationBase< PermutationDerived > &permutation)
Definition: PermutationMatrix.h:474
Namespace containing all symbols from the Eigen library.
Definition: B01_Experimental.dox:1
Definition: BFloat16.h:231
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:82