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);