Deterministic Gaussian Sampling
Loading...
Searching...
No Matches
gsl_vector_matrix_types.h
1#ifndef GSL_VECTOR_MATRIX_TYPES_H
2#define GSL_VECTOR_MATRIX_TYPES_H
3
4#include <gsl/gsl_matrix.h>
5#include <gsl/gsl_vector.h>
6
7#include <cstring>
8#include <type_traits>
9#include <vector>
10
11// Helper class to handle GSL types and views for float and double only
12template <typename T>
14 public:
15 static_assert(std::is_same<T, float>::value || std::is_same<T, double>::value,
16 "GSLTemplateTypeAlias only supports float and double");
17
18 using MatrixType =
19 typename std::conditional<std::is_same<T, double>::value, gsl_matrix,
21
22 using MatrixViewType =
23 typename std::conditional<std::is_same<T, double>::value, gsl_matrix_view,
25
26 using VectorType =
27 typename std::conditional<std::is_same<T, double>::value, gsl_vector,
29
30 using VectorViewType =
31 typename std::conditional<std::is_same<T, double>::value, gsl_vector_view,
33
34 // Static method to create a vector view from a raw pointer
35 static VectorViewType vector_view_from_array(const T* data, size_t size) {
36 return vector_view_from_array(const_cast<T*>(data), size);
37 }
38 static VectorViewType vector_view_from_array(T* data, size_t size) {
39 if constexpr (std::is_same<T, double>::value) {
41 } else {
43 }
44 }
45
46 // Static method to flatten a matrix into a vector view
47 static VectorViewType flatten_matrix_to_vector(MatrixType* m) {
48 return vector_view_from_array(m->data, m->size1 * m->size2);
49 }
50 static VectorViewType flatten_matrix_to_vector(const MatrixType* m) {
51 return vector_view_from_array(m->data, m->size1 * m->size2);
52 }
53
54 // Static method to allocate / free a vector
55 static VectorType* allocate_vector(size_t size) {
56 if constexpr (std::is_same<T, double>::value) {
57 return gsl_vector_alloc(size);
58 } else {
60 }
61 }
62 static void free_vector(VectorType* v) {
63 if constexpr (std::is_same<T, double>::value) {
65 } else {
67 }
68 }
69
70 // Static method to create a matrix view from a raw pointer
71 static MatrixViewType matrix_view_from_array(const T* data, size_t size1, size_t size2) {
72 return matrix_view_from_array(const_cast<T*>(data), size1, size2);
73 }
74 static MatrixViewType matrix_view_from_array(T* data, size_t size1, size_t size2) {
75 if constexpr (std::is_same<T, double>::value) {
77 } else {
79 }
80 }
81
82 // Static method to allocate / free a matrix
83 static MatrixType* allocate_matrix(size_t rows, size_t cols) {
84 if constexpr (std::is_same<T, double>::value) {
85 return gsl_matrix_alloc(rows, cols);
86 } else {
88 }
89 }
90 static void free_matrix(MatrixType* m) {
91 if constexpr (std::is_same<T, double>::value) {
93 } else {
95 }
96 }
97};
98
99#endif // GSL_VECTOR_MATRIX_TYPES_H
Definition gsl_vector_matrix_types.h:13
Definition dirac_to_dirac_approx_short.h:9