1 #define TYPEDEPARGS 0
2 #define SINGLEARGS
3 #define COMPLEXINDEPENDENT
4 #define OCTFILENAME comp_col2diag // change to filename
5 #define OCTFILEHELP "Computes spreading permutation.\n\
6                      Usage: cout=comp_col2diag(cin);\n Yeah."
7 
8 #include "ltfat_oct_template_helper.h"
9 
10 /*
11   col2diag forwarders
12 */
13 
14 static inline void
fwd_col2diag(const Complex * cin,const octave_idx_type L,Complex * cout)15 fwd_col2diag(const Complex *cin, const octave_idx_type L, Complex *cout)
16 {
17     ltfat_col2diag_dc(reinterpret_cast<const ltfat_complex_d*>(cin), L,
18                 reinterpret_cast<ltfat_complex_d*>(cout));
19 }
20 
21 static inline void
fwd_col2diag(const FloatComplex * cin,const octave_idx_type L,FloatComplex * cout)22 fwd_col2diag(const FloatComplex *cin, const octave_idx_type L,
23              FloatComplex *cout)
24 {
25     ltfat_col2diag_sc(reinterpret_cast<const ltfat_complex_s*>(cin), L,
26                 reinterpret_cast<ltfat_complex_s*>(cout));
27 }
28 
29 static inline void
fwd_col2diag(const double * cin,const octave_idx_type L,double * cout)30 fwd_col2diag(const double *cin, const octave_idx_type L, double *cout)
31 {
32     ltfat_col2diag_d(cin, L, cout);
33 }
34 
35 static inline void
fwd_col2diag(const float * cin,const octave_idx_type L,float * cout)36 fwd_col2diag(const float *cin, const octave_idx_type L, float *cout)
37 {
38     ltfat_col2diag_s(cin, L, cout);
39 }
40 
41 template <class LTFAT_TYPE, class LTFAT_REAL, class LTFAT_COMPLEX>
42 octave_value_list
octFunction(const octave_value_list & args,int nargout)43 octFunction(const octave_value_list& args, int nargout)
44 {
45     MArray<LTFAT_TYPE> cin = ltfatOctArray<LTFAT_TYPE>(args(0));
46     MArray<LTFAT_TYPE> cout(cin.dims());
47     cout.fill(0);
48 
49     const octave_idx_type L = cin.rows();
50 
51     fwd_col2diag(cin.data(), L, cout.fortran_vec());
52 
53     return octave_value(cout);
54 }
55