SOPT
Sparse OPTimisation
cdata.h
Go to the documentation of this file.
1 #ifndef SOPT_TOOLS_FOR_TESTS_CDATA
2 #define SOPT_TOOLS_FOR_TESTS_CDATA
3 
4 #include "sopt/config.h"
5 #include <Eigen/Core>
7 
8 namespace sopt {
9 // Wraps calls to sampling and wavelets to C style
10 template <typename T>
11 struct CData {
12  using t_Vector = Eigen::Matrix<T, Eigen::Dynamic, 1>;
13  typename t_Vector::Index nin, nout;
16 };
17 
18 template <typename T>
19 void direct_transform(void *out, void *in, void **data) {
20  CData<T> const &cdata = *(CData<T> *)data;
21  using t_Vector = Eigen::Matrix<T, Eigen::Dynamic, 1>;
22  t_Vector const eval = cdata.transform * t_Vector::Map((T *)in, cdata.nin);
23  ++(((CData<T> *)data)->direct_calls);
24  t_Vector::Map((T *)out, cdata.nout) = eval;
25 }
26 template <typename T>
27 void adjoint_transform(void *out, void *in, void **data) {
28  CData<T> const &cdata = *(CData<T> *)data;
29  using t_Vector = Eigen::Matrix<T, Eigen::Dynamic, 1>;
30  t_Vector const eval = cdata.transform.adjoint() * t_Vector::Map((T *)in, cdata.nout);
31  ++(((CData<T> *)data)->adjoint_calls);
32  t_Vector::Map((T *)out, cdata.nin) = eval;
33 }
34 
35 } // namespace sopt
36 #endif
sopt::Vector< Scalar > t_Vector
LinearTransform< VECTOR > adjoint() const
Indirect transform.
void direct_transform(void *out, void *in, void **data)
Definition: cdata.h:19
void adjoint_transform(void *out, void *in, void **data)
Definition: cdata.h:27
size_t t_uint
Root of the type hierarchy for unsigned integers.
Definition: types.h:15
sopt::LinearTransform< t_Vector > const & transform
Definition: cdata.h:14
t_Vector::Index nin
Definition: cdata.h:13
t_uint adjoint_calls
Definition: cdata.h:15
t_Vector::Index nout
Definition: cdata.h:13
Eigen::Matrix< T, Eigen::Dynamic, 1 > t_Vector
Definition: cdata.h:12
t_uint direct_calls
Definition: cdata.h:15