1 /** D bindings for GSL. 2 Authors: Chibisi Chima-Okereke 3 Copyright: Copyright (c) 2016, Chibisi Chima-Okereke. All rights reserved. 4 License: Boost License 1.0 5 */ 6 7 module gsl.permutation; 8 import gsl.errno; 9 import gsl.vector; 10 import core.stdc.config; 11 import core.stdc.stdio : FILE; 12 import gsl.check_range; 13 import gsl.complex; 14 15 extern (C): 16 17 //gsl_permutation 18 alias gsl_permutation_struct gsl_permutation; 19 20 struct gsl_permutation_struct 21 { 22 size_t size; 23 size_t* data; 24 } 25 26 gsl_permutation* gsl_permutation_alloc (const size_t n); 27 gsl_permutation* gsl_permutation_calloc (const size_t n); 28 void gsl_permutation_init (gsl_permutation* p); 29 void gsl_permutation_free (gsl_permutation* p); 30 int gsl_permutation_memcpy (gsl_permutation* dest, const(gsl_permutation)* src); 31 int gsl_permutation_fread (FILE* stream, gsl_permutation* p); 32 int gsl_permutation_fwrite (FILE* stream, const(gsl_permutation)* p); 33 int gsl_permutation_fscanf (FILE* stream, gsl_permutation* p); 34 int gsl_permutation_fprintf (FILE* stream, const(gsl_permutation)* p, const(char)* format); 35 size_t gsl_permutation_size (const(gsl_permutation)* p); 36 size_t* gsl_permutation_data (const(gsl_permutation)* p); 37 int gsl_permutation_swap (gsl_permutation* p, const size_t i, const size_t j); 38 int gsl_permutation_valid (const(gsl_permutation)* p); 39 void gsl_permutation_reverse (gsl_permutation* p); 40 int gsl_permutation_inverse (gsl_permutation* inv, const(gsl_permutation)* p); 41 int gsl_permutation_next (gsl_permutation* p); 42 int gsl_permutation_prev (gsl_permutation* p); 43 int gsl_permutation_mul (gsl_permutation* p, const(gsl_permutation)* pa, const(gsl_permutation)* pb); 44 int gsl_permutation_linear_to_canonical (gsl_permutation* q, const(gsl_permutation)* p); 45 int gsl_permutation_canonical_to_linear (gsl_permutation* p, const(gsl_permutation)* q); 46 size_t gsl_permutation_inversions (const(gsl_permutation)* p); 47 size_t gsl_permutation_linear_cycles (const(gsl_permutation)* p); 48 size_t gsl_permutation_canonical_cycles (const(gsl_permutation)* q); 49 size_t gsl_permutation_get (const(gsl_permutation)* p, const size_t i); 50 51 //gsl_permute_char 52 int gsl_permute_char (const(size_t)* p, char* data, const size_t stride, const size_t n); 53 int gsl_permute_char_inverse (const(size_t)* p, char* data, const size_t stride, const size_t n); 54 55 //gsl_permute_complex_double 56 int gsl_permute_complex (const(size_t)* p, double* data, const size_t stride, const size_t n); 57 int gsl_permute_complex_inverse (const(size_t)* p, double* data, const size_t stride, const size_t n); 58 59 //gsl_permute_complex_float 60 int gsl_permute_complex_float (const(size_t)* p, float* data, const size_t stride, const size_t n); 61 int gsl_permute_complex_float_inverse (const(size_t)* p, float* data, const size_t stride, const size_t n); 62 63 //gsl_permute_complex_long_double 64 int gsl_permute_complex_long_double (const(size_t)* p, real* data, const size_t stride, const size_t n); 65 int gsl_permute_complex_long_double_inverse (const(size_t)* p, real* data, const size_t stride, const size_t n); 66 67 //gsl_permute_double 68 int gsl_permute (const(size_t)* p, double* data, const size_t stride, const size_t n); 69 int gsl_permute_inverse (const(size_t)* p, double* data, const size_t stride, const size_t n); 70 71 //gsl_permute_float 72 int gsl_permute_float (const(size_t)* p, float* data, const size_t stride, const size_t n); 73 int gsl_permute_float_inverse (const(size_t)* p, float* data, const size_t stride, const size_t n); 74 75 //gsl_permute_int 76 int gsl_permute_int (const(size_t)* p, int* data, const size_t stride, const size_t n); 77 int gsl_permute_int_inverse (const(size_t)* p, int* data, const size_t stride, const size_t n); 78 79 //gsl_permute_long 80 int gsl_permute_long (const(size_t)* p, c_long* data, const size_t stride, const size_t n); 81 int gsl_permute_long_inverse (const(size_t)* p, c_long* data, const size_t stride, const size_t n); 82 83 //gsl_permutation 84 int gsl_permute_long_double (const(size_t)* p, real* data, const size_t stride, const size_t n); 85 int gsl_permute_long_double_inverse (const(size_t)* p, real* data, const size_t stride, const size_t n); 86 87 //gsl_permute_short 88 int gsl_permute_short (const(size_t)* p, short* data, const size_t stride, const size_t n); 89 int gsl_permute_short_inverse (const(size_t)* p, short* data, const size_t stride, const size_t n); 90 91 //gsl_permute_uchar 92 int gsl_permute_uchar (const(size_t)* p, ubyte* data, const size_t stride, const size_t n); 93 int gsl_permute_uchar_inverse (const(size_t)* p, ubyte* data, const size_t stride, const size_t n); 94 95 //gsl_permute_uint 96 int gsl_permute_uint (const(size_t)* p, uint* data, const size_t stride, const size_t n); 97 int gsl_permute_uint_inverse (const(size_t)* p, uint* data, const size_t stride, const size_t n); 98 99 //gsl_permute_ulong 100 int gsl_permute_ulong (const(size_t)* p, c_ulong* data, const size_t stride, const size_t n); 101 int gsl_permute_ulong_inverse (const(size_t)* p, c_ulong* data, const size_t stride, const size_t n); 102 103 //gsl_permute_ushort 104 int gsl_permute_ushort (const(size_t)* p, ushort* data, const size_t stride, const size_t n); 105 int gsl_permute_ushort_inverse (const(size_t)* p, ushort* data, const size_t stride, const size_t n); 106 107 //gsl_permute_vector_char 108 int gsl_permute_vector_char (const(gsl_permutation)* p, gsl_vector_char* v); 109 int gsl_permute_vector_char_inverse (const(gsl_permutation)* p, gsl_vector_char* v); 110 111 //gsl_permute_vector_complex 112 int gsl_permute_vector_complex (const(gsl_permutation)* p, gsl_vector_complex* v); 113 int gsl_permute_vector_complex_inverse (const(gsl_permutation)* p, gsl_vector_complex* v); 114 115 //gsl_permute_vector_complex_float 116 int gsl_permute_vector_complex_float (const(gsl_permutation)* p, gsl_vector_complex_float* v); 117 int gsl_permute_vector_complex_float_inverse (const(gsl_permutation)* p, gsl_vector_complex_float* v); 118 119 //gsl_permute_vector_complex_long_double 120 int gsl_permute_vector_complex_long_double (const(gsl_permutation)* p, gsl_vector_complex_long_double* v); 121 int gsl_permute_vector_complex_long_double_inverse (const(gsl_permutation)* p, gsl_vector_complex_long_double* v); 122 123 //gsl_permute_vector 124 int gsl_permute_vector (const(gsl_permutation)* p, gsl_vector* v); 125 int gsl_permute_vector_inverse (const(gsl_permutation)* p, gsl_vector* v); 126 127 //gsl_permute_vector_float 128 int gsl_permute_vector_float (const(gsl_permutation)* p, gsl_vector_float* v); 129 int gsl_permute_vector_float_inverse (const(gsl_permutation)* p, gsl_vector_float* v); 130 131 //gsl_permute_vector_int 132 int gsl_permute_vector_int (const(gsl_permutation)* p, gsl_vector_int* v); 133 int gsl_permute_vector_int_inverse (const(gsl_permutation)* p, gsl_vector_int* v); 134 135 //gsl_permute_vector_long 136 int gsl_permute_vector_long (const(gsl_permutation)* p, gsl_vector_long* v); 137 int gsl_permute_vector_long_inverse (const(gsl_permutation)* p, gsl_vector_long* v); 138 139 //gsl_permute_vector_long_double 140 int gsl_permute_vector_long_double (const(gsl_permutation)* p, gsl_vector_long_double* v); 141 int gsl_permute_vector_long_double_inverse (const(gsl_permutation)* p, gsl_vector_long_double* v); 142 143 //gsl_permute_vector_short 144 int gsl_permute_vector_short (const(gsl_permutation)* p, gsl_vector_short* v); 145 int gsl_permute_vector_short_inverse (const(gsl_permutation)* p, gsl_vector_short* v); 146 147 //gsl_permute_vector_uchar 148 int gsl_permute_vector_uchar (const(gsl_permutation)* p, gsl_vector_uchar* v); 149 int gsl_permute_vector_uchar_inverse (const(gsl_permutation)* p, gsl_vector_uchar* v); 150 151 //gsl_permute_vector_uint 152 int gsl_permute_vector_uint (const(gsl_permutation)* p, gsl_vector_uint* v); 153 int gsl_permute_vector_uint_inverse (const(gsl_permutation)* p, gsl_vector_uint* v); 154 155 //gsl_permute_vector_ulong 156 int gsl_permute_vector_ulong (const(gsl_permutation)* p, gsl_vector_ulong* v); 157 int gsl_permute_vector_ulong_inverse (const(gsl_permutation)* p, gsl_vector_ulong* v); 158 159 //gsl_permute_vector_ushort 160 int gsl_permute_vector_ushort (const(gsl_permutation)* p, gsl_vector_ushort* v); 161 int gsl_permute_vector_ushort_inverse (const(gsl_permutation)* p, gsl_vector_ushort* v);