15 static_assert(std::is_same<T, float>::value || std::is_same<T, double>::value,
16 "GSLTemplateTypeAlias only supports float and double");
19 typename std::conditional<std::is_same<T, double>::value,
gsl_matrix,
22 using MatrixViewType =
23 typename std::conditional<std::is_same<T, double>::value,
gsl_matrix_view,
27 typename std::conditional<std::is_same<T, double>::value,
gsl_vector,
30 using VectorViewType =
31 typename std::conditional<std::is_same<T, double>::value,
gsl_vector_view,
35 static VectorViewType vector_view_from_array(
const T*
data,
size_t size) {
36 return vector_view_from_array(
const_cast<T*
>(
data),
size);
38 static VectorViewType vector_view_from_array(
T*
data,
size_t size) {
39 if constexpr (std::is_same<T, double>::value) {
47 static VectorViewType flatten_matrix_to_vector(MatrixType*
m) {
48 return vector_view_from_array(
m->data,
m->size1 *
m->size2);
50 static VectorViewType flatten_matrix_to_vector(
const MatrixType*
m) {
51 return vector_view_from_array(
m->data,
m->size1 *
m->size2);
55 static VectorType* allocate_vector(
size_t size) {
56 if constexpr (std::is_same<T, double>::value) {
62 static void free_vector(VectorType*
v) {
63 if constexpr (std::is_same<T, double>::value) {
71 static MatrixViewType matrix_view_from_array(
const T*
data,
size_t size1,
size_t size2) {
74 static MatrixViewType matrix_view_from_array(
T*
data,
size_t size1,
size_t size2) {
75 if constexpr (std::is_same<T, double>::value) {
83 static MatrixType* allocate_matrix(
size_t rows,
size_t cols) {
84 if constexpr (std::is_same<T, double>::value) {
90 static void free_matrix(MatrixType*
m) {
91 if constexpr (std::is_same<T, double>::value) {