tinyopt
700
Tinyopt, a lightweight, header only optimization library
Toggle main menu visibility
Loading...
Searching...
No Matches
matrix_traits.h
1
// Copyright 2026 Julien Michot.
2
// SPDX-License-Identifier: Apache-2.0
3
4
#pragma once
5
6
#include <tinyopt/types.h>
7
#include <tinyopt/traits/type_traits.h>
8
9
namespace
tinyopt::traits {
10
11
// Trait to check if a type is a Sparse Matrix.
12
template
<
typename
T>
13
struct
is_sparse_matrix
: std::false_type {};
14
template
<
typename
T>
15
struct
is_sparse_matrix
<SparseMatrix<T>> : std::true_type {};
16
17
template
<
typename
T>
18
inline
constexpr
bool
is_sparse_matrix_v =
is_sparse_matrix<std::decay_t<T>
>::value;
19
20
// Trait to check if a type is a Matrix/Vector.
21
template
<
typename
T,
typename
=
void
>
22
struct
is_matrix_or_array
: std::false_type {};
23
24
template
<
typename
T>
25
struct
is_matrix_or_array
<
26
T,
27
std::void_t<decltype(std::declval<const std::remove_cvref_t<T>&>().rows()),
28
decltype(std::declval<const std::remove_cvref_t<T>&>().cols()),
29
typename std::remove_cvref_t<T>::Scalar>>
30
: std::bool_constant<!is_sparse_matrix<std::remove_cvref_t<T>>::value> {};
31
32
template
<
typename
T>
33
inline
constexpr
bool
is_matrix_or_array_v =
is_matrix_or_array<std::remove_cvref_t<T>
>::value;
34
35
template
<
typename
T>
36
inline
constexpr
bool
is_matrix_or_scalar_v =
37
(std::is_scalar_v<T> && !std::is_same_v<T, bool>) || is_sparse_matrix_v<T> ||
38
is_matrix_or_array_v<T>;
39
40
}
// namespace tinyopt::traits
tinyopt::traits::is_matrix_or_array
Definition
matrix_traits.h:22
tinyopt::traits::is_sparse_matrix
Definition
matrix_traits.h:13
include
tinyopt
traits
matrix_traits.h
Generated by
1.18.0