20#ifndef CCGSL_PERMUTE_HPP
21#define CCGSL_PERMUTE_HPP
24#include<gsl/gsl_permute.h>
43 if( p.
get()->size !=
n ){
47 return gsl_permute_complex( p.
get()->data, data, stride,
n ); }
57 if( p.
get()->size !=
n ){
61 return gsl_permute_complex_float( p.
get()->data, data, stride,
n ); }
72 if( p.
get()->size !=
n ){
76 return gsl_permute_complex_long_double( p.
get()->data, data, stride,
n ); }
85 inline int forward(
permutation const& p,
double* data,
size_t const stride,
size_t const n ){
86 if( p.
get()->size !=
n ){
90 return gsl_permute( p.
get()->data, data, stride,
n ); }
100 if( p.
get()->size !=
n ){
104 return gsl_permute_float( p.
get()->data, data, stride,
n ); }
114 if( p.
get()->size !=
n ){
118 return gsl_permute_int( p.
get()->data, data, stride,
n ); }
130 if( p.
get()->size !=
n ){
134 return gsl_permute_long_double( p.
get()->data, data, stride,
n ); }
144 if( p.
get()->size !=
n ){
148 return gsl_permute_long( p.
get()->data, data, stride,
n ); }
158 if( p.
get()->size !=
n ){
162 return gsl_permute_short( p.
get()->data, data, stride,
n ); }
172 if( p.
get()->size !=
n ){
176 return gsl_permute_uchar( p.
get()->data, data, stride,
n ); }
186 if( p.
get()->size !=
n ){
190 return gsl_permute_uint( p.
get()->data, data, stride,
n ); }
200 if( p.
get()->size !=
n ){
204 return gsl_permute_ulong( p.
get()->data, data, stride,
n ); }
214 if( p.
get()->size !=
n ){
218 return gsl_permute_ushort( p.
get()->data, data, stride,
n ); }
230 if( p.
get()->size !=
n ){
234 return gsl_permute_complex( p.
get()->data, data, 1,
n ); }
243 if( p.
get()->size !=
n ){
247 return gsl_permute_complex_float( p.
get()->data, data, 1,
n ); }
257 if( p.
get()->size !=
n ){
261 return gsl_permute_complex_long_double( p.
get()->data, data, 1,
n ); }
270 if( p.
get()->size !=
n ){
274 return gsl_permute( p.
get()->data, data, 1,
n ); }
283 if( p.
get()->size !=
n ){
287 return gsl_permute_float( p.
get()->data, data, 1,
n ); }
296 if( p.
get()->size !=
n ){
300 return gsl_permute_int( p.
get()->data, data, 1,
n ); }
311 if( p.
get()->size !=
n ){
315 return gsl_permute_long_double( p.
get()->data, data, 1,
n ); }
324 if( p.
get()->size !=
n ){
328 return gsl_permute_long( p.
get()->data, data, 1,
n ); }
337 if( p.
get()->size !=
n ){
341 return gsl_permute_short( p.
get()->data, data, 1,
n ); }
350 if( p.
get()->size !=
n ){
354 return gsl_permute_uchar( p.
get()->data, data, 1,
n ); }
363 if( p.
get()->size !=
n ){
367 return gsl_permute_uint( p.
get()->data, data, 1,
n ); }
376 if( p.
get()->size !=
n ){
380 return gsl_permute_ulong( p.
get()->data, data, 1,
n ); }
389 if( p.
get()->size !=
n ){
393 return gsl_permute_ushort( p.
get()->data, data, 1,
n ); }
405 template<
typename DATA>
407 if( p.
get()->size != data.size() ){
411 return gsl_permute_complex( p.
get()->data, data.data(), stride, data.size() / stride ); }
420 template<
typename DATA>
422 if( p.
get()->size != data.size() ){
426 return gsl_permute_complex_float( p.
get()->data, data.data(), stride, data.size() / stride ); }
435 template<
typename DATA>
437 if( p.
get()->size != data.size() ){
441 return gsl_permute_complex_long_double( p.
get()->data, data.data(), stride, data.size() / stride ); }
450 template<
typename DATA>
452 if( p.
get()->size != data.size() ){
456 return gsl_permute( p.
get()->data, data.data(), stride, data.size() / stride ); }
465 template<
typename DATA>
467 if( p.
get()->size != data.size() ){
471 return gsl_permute_float( p.
get()->data, data.data(), stride, data.size() / stride ); }
480 template<
typename DATA>
482 if( p.
get()->size != data.size() ){
486 return gsl_permute_int( p.
get()->data, data.data(), stride, data.size() / stride ); }
496 template<
typename DATA>
498 if( p.
get()->size != data.size() ){
502 return gsl_permute_long_double( p.
get()->data, data.data(), stride, data.size() / stride ); }
511 template<
typename DATA>
513 if( p.
get()->size != data.size() ){
517 return gsl_permute_long( p.
get()->data, data.data(), stride, data.size() / stride ); }
526 template<
typename DATA>
528 if( p.
get()->size != data.size() ){
532 return gsl_permute_short( p.
get()->data, data.data(), stride, data.size() / stride ); }
541 template<
typename DATA>
543 if( p.
get()->size != data.size() ){
547 return gsl_permute_uchar( p.
get()->data, data.data(), stride, data.size() / stride ); }
556 template<
typename DATA>
558 if( p.
get()->size != data.size() ){
562 return gsl_permute_uint( p.
get()->data, data.data(), stride, data.size() / stride ); }
571 template<
typename DATA>
573 if( p.
get()->size != data.size() ){
577 return gsl_permute_ulong( p.
get()->data, data.data(), stride, data.size() / stride ); }
586 template<
typename DATA>
588 if( p.
get()->size != data.size() ){
592 return gsl_permute_ushort( p.
get()->data, data.data(), stride, data.size() / stride ); }
605 if( p.
get()->size !=
n ){
609 return gsl_permute_complex_inverse( p.
get()->data, data, stride,
n ); }
618 inline int complex_float_inverse( permutation
const& p,
float* data,
size_t const stride,
size_t const n ){
619 if( p.get()->size !=
n ){
623 return gsl_permute_complex_float_inverse( p.get()->data, data, stride,
n ); }
634 if( p.get()->size !=
n ){
638 return gsl_permute_complex_long_double_inverse( p.get()->data, data, stride,
n ); }
647 inline int inverse( permutation
const& p,
double* data,
size_t const stride,
size_t const n ){
648 if( p.get()->size !=
n ){
652 return gsl_permute_inverse( p.get()->data, data, stride,
n ); }
661 inline int float_inverse( permutation
const& p,
float* data,
size_t const stride,
size_t const n ){
662 if( p.get()->size !=
n ){
666 return gsl_permute_float_inverse( p.get()->data, data, stride,
n ); }
675 inline int int_inverse( permutation
const& p,
int* data,
size_t const stride,
size_t const n ){
676 if( p.get()->size !=
n ){
680 return gsl_permute_int_inverse( p.get()->data, data, stride,
n ); }
690 inline int long_double_inverse( permutation
const& p,
long double* data,
size_t const stride,
692 if( p.get()->size !=
n ){
696 return gsl_permute_long_double_inverse( p.get()->data, data, stride,
n ); }
705 inline int long_inverse( permutation
const& p,
long* data,
size_t const stride,
size_t const n ){
706 if( p.get()->size !=
n ){
710 return gsl_permute_long_inverse( p.get()->data, data, stride,
n ); }
719 inline int short_inverse( permutation
const& p,
short* data,
size_t const stride,
size_t const n ){
720 if( p.get()->size !=
n ){
724 return gsl_permute_short_inverse( p.get()->data, data, stride,
n ); }
733 inline int uchar_inverse( permutation
const& p,
unsigned char* data,
size_t const stride,
size_t const n ){
734 if( p.get()->size !=
n ){
738 return gsl_permute_uchar_inverse( p.get()->data, data, stride,
n ); }
747 inline int uint_inverse( permutation
const& p,
unsigned int* data,
size_t const stride,
size_t const n ){
748 if( p.get()->size !=
n ){
752 return gsl_permute_uint_inverse( p.get()->data, data, stride,
n ); }
761 inline int ulong_inverse( permutation
const& p,
unsigned long* data,
size_t const stride,
size_t const n ){
762 if( p.get()->size !=
n ){
766 return gsl_permute_ulong_inverse( p.get()->data, data, stride,
n ); }
775 inline int ushort_inverse( permutation
const& p,
unsigned short* data,
size_t const stride,
size_t const n ){
776 if( p.get()->size !=
n ){
780 return gsl_permute_ushort_inverse( p.get()->data, data, stride,
n ); }
791 inline int complex_inverse( permutation
const& p,
double* data,
size_t const n ){
792 if( p.get()->size !=
n ){
796 return gsl_permute_complex_inverse( p.get()->data, data, 1,
n ); }
805 if( p.get()->size !=
n ){
809 return gsl_permute_complex_float_inverse( p.get()->data, data, 1,
n ); }
819 if( p.get()->size !=
n ){
823 return gsl_permute_complex_long_double_inverse( p.get()->data, data, 1,
n ); }
831 inline int inverse( permutation
const& p,
double* data,
size_t const n ){
832 if( p.get()->size !=
n ){
836 return gsl_permute_inverse( p.get()->data, data, 1,
n ); }
844 inline int float_inverse( permutation
const& p,
float* data,
size_t const n ){
845 if( p.get()->size !=
n ){
849 return gsl_permute_float_inverse( p.get()->data, data, 1,
n ); }
857 inline int int_inverse( permutation
const& p,
int* data,
size_t const n ){
858 if( p.get()->size !=
n ){
862 return gsl_permute_int_inverse( p.get()->data, data, 1,
n ); }
873 if( p.get()->size !=
n ){
877 return gsl_permute_long_double_inverse( p.get()->data, data, 1,
n ); }
885 inline int long_inverse( permutation
const& p,
long* data,
size_t const n ){
886 if( p.get()->size !=
n ){
890 return gsl_permute_long_inverse( p.get()->data, data, 1,
n ); }
898 inline int short_inverse( permutation
const& p,
short* data,
size_t const n ){
899 if( p.get()->size !=
n ){
903 return gsl_permute_short_inverse( p.get()->data, data, 1,
n ); }
911 inline int uchar_inverse( permutation
const& p,
unsigned char* data,
size_t const n ){
912 if( p.get()->size !=
n ){
916 return gsl_permute_uchar_inverse( p.get()->data, data, 1,
n ); }
924 inline int uint_inverse( permutation
const& p,
unsigned int* data,
size_t const n ){
925 if( p.get()->size !=
n ){
929 return gsl_permute_uint_inverse( p.get()->data, data, 1,
n ); }
937 inline int ulong_inverse( permutation
const& p,
unsigned long* data,
size_t const n ){
938 if( p.get()->size !=
n ){
942 return gsl_permute_ulong_inverse( p.get()->data, data, 1,
n ); }
950 inline int ushort_inverse( permutation
const& p,
unsigned short* data,
size_t const n ){
951 if( p.get()->size !=
n ){
955 return gsl_permute_ushort_inverse( p.get()->data, data, 1,
n ); }
967 template<
typename DATA>
969 if( p.
get()->size != data.size() ){
973 return gsl_permute_complex_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
982 template<
typename DATA>
984 if( p.
get()->size != data.size() ){
988 return gsl_permute_complex_float_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
997 template<
typename DATA>
999 if( p.
get()->size != data.size() ){
1003 return gsl_permute_complex_long_double_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1012 template<
typename DATA>
1014 if( p.
get()->size != data.size() ){
1018 return gsl_permute_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1027 template<
typename DATA>
1029 if( p.
get()->size != data.size() ){
1033 return gsl_permute_float_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1042 template<
typename DATA>
1044 if( p.
get()->size != data.size() ){
1048 return gsl_permute_int_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1058 template<
typename DATA>
1060 if( p.
get()->size != data.size() ){
1064 return gsl_permute_long_double_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1073 template<
typename DATA>
1075 if( p.
get()->size != data.size() ){
1079 return gsl_permute_long_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1088 template<
typename DATA>
1090 if( p.
get()->size != data.size() ){
1094 return gsl_permute_short_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1103 template<
typename DATA>
1105 if( p.
get()->size != data.size() ){
1109 return gsl_permute_uchar_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1118 template<
typename DATA>
1120 if( p.
get()->size != data.size() ){
1124 return gsl_permute_uint_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1133 template<
typename DATA>
1135 if( p.
get()->size != data.size() ){
1139 return gsl_permute_ulong_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
1148 template<
typename DATA>
1150 if( p.
get()->size != data.size() ){
1154 return gsl_permute_ushort_inverse( p.
get()->data, data.data(), stride, data.size() / stride ); }
@ GSL_ESANITY
sanity check failed - shouldn't happen
This class handles GSL permutation objects.
gsl_permutation * get()
Get the gsl_permutation.
int float_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_float_inverse().
int int_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_int().
int long_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_long().
int float_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_float().
int ushort_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_ushort_inverse().
int short_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_short_inverse().
int forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute().
int complex_long_double_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_complex_long_double().
int uint_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_uint().
int long_double_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_long_double_inverse().
int ushort_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_ushort().
int complex_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_complex_inverse().
int complex_float_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_complex_float().
int complex_long_double_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_complex_long_double_inverse().
int uint_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_uint_inverse().
int complex_float_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_complex_float_inverse().
int inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_inverse().
int ulong_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_ulong_inverse().
int long_double_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_long_double().
int uchar_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_uchar_inverse().
int short_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_short().
int int_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_int_inverse().
int ulong_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_ulong().
int complex_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_complex().
int long_inverse(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_long_inverse().
int uchar_forward(permutation const &p, DATA &data, size_t const stride=1)
C++ version of gsl_permute_uchar().
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
The gsl package creates an interface to the GNU Scientific Library for C++.