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.sort;
8 import gsl.vector;
9 import gsl.errno;
10 import gsl.permutation;
11 import core.stdc.config : c_long, c_ulong;
12 //import core.stdc.float;
13 
14 
15 //gsl_heapsort
16 alias int function (const(void)*, const(void)*) gsl_comparison_fn_t;
17 
18 void gsl_heapsort (void* array, size_t count, size_t size, gsl_comparison_fn_t compare);
19 int gsl_heapsort_index (size_t* p, const(void)* array, size_t count, size_t size, gsl_comparison_fn_t compare);
20 
21 //gsl_sort_char
22 void gsl_sort_char (char* data, const size_t stride, const size_t n);
23 void gsl_sort2_char (char* data1, const size_t stride1, char* data2, const size_t stride2, const size_t n);
24 void gsl_sort_char_index (size_t* p, const(char)* data, const size_t stride, const size_t n);
25 int gsl_sort_char_smallest (char* dest, const size_t k, const(char)* src, const size_t stride, const size_t n);
26 int gsl_sort_char_smallest_index (size_t* p, const size_t k, const(char)* src, const size_t stride, const size_t n);
27 int gsl_sort_char_largest (char* dest, const size_t k, const(char)* src, const size_t stride, const size_t n);
28 int gsl_sort_char_largest_index (size_t* p, const size_t k, const(char)* src, const size_t stride, const size_t n);
29 
30 //gsl_sort_double
31 void gsl_sort (double* data, const size_t stride, const size_t n);
32 void gsl_sort2 (double* data1, const size_t stride1, double* data2, const size_t stride2, const size_t n);
33 void gsl_sort_index (size_t* p, const(double)* data, const size_t stride, const size_t n);
34 int gsl_sort_smallest (double* dest, const size_t k, const(double)* src, const size_t stride, const size_t n);
35 int gsl_sort_smallest_index (size_t* p, const size_t k, const(double)* src, const size_t stride, const size_t n);
36 int gsl_sort_largest (double* dest, const size_t k, const(double)* src, const size_t stride, const size_t n);
37 int gsl_sort_largest_index (size_t* p, const size_t k, const(double)* src, const size_t stride, const size_t n);
38 
39 //gsl_sort_float
40 void gsl_sort_float (float* data, const size_t stride, const size_t n);
41 void gsl_sort2_float (float* data1, const size_t stride1, float* data2, const size_t stride2, const size_t n);
42 void gsl_sort_float_index (size_t* p, const(float)* data, const size_t stride, const size_t n);
43 int gsl_sort_float_smallest (float* dest, const size_t k, const(float)* src, const size_t stride, const size_t n);
44 int gsl_sort_float_smallest_index (size_t* p, const size_t k, const(float)* src, const size_t stride, const size_t n);
45 int gsl_sort_float_largest (float* dest, const size_t k, const(float)* src, const size_t stride, const size_t n);
46 int gsl_sort_float_largest_index (size_t* p, const size_t k, const(float)* src, const size_t stride, const size_t n);
47 
48 //gsl_sort_int
49 void gsl_sort_int (int* data, const size_t stride, const size_t n);
50 void gsl_sort2_int (int* data1, const size_t stride1, int* data2, const size_t stride2, const size_t n);
51 void gsl_sort_int_index (size_t* p, const(int)* data, const size_t stride, const size_t n);
52 int gsl_sort_int_smallest (int* dest, const size_t k, const(int)* src, const size_t stride, const size_t n);
53 int gsl_sort_int_smallest_index (size_t* p, const size_t k, const(int)* src, const size_t stride, const size_t n);
54 int gsl_sort_int_largest (int* dest, const size_t k, const(int)* src, const size_t stride, const size_t n);
55 int gsl_sort_int_largest_index (size_t* p, const size_t k, const(int)* src, const size_t stride, const size_t n);
56 
57 //gsl_sort_long
58 void gsl_sort_long (c_long* data, const size_t stride, const size_t n);
59 void gsl_sort2_long (c_long* data1, const size_t stride1, c_long* data2, const size_t stride2, const size_t n);
60 void gsl_sort_long_index (size_t* p, const(c_long)* data, const size_t stride, const size_t n);
61 int gsl_sort_long_smallest (c_long* dest, const size_t k, const(c_long)* src, const size_t stride, const size_t n);
62 int gsl_sort_long_smallest_index (size_t* p, const size_t k, const(c_long)* src, const size_t stride, const size_t n);
63 int gsl_sort_long_largest (c_long* dest, const size_t k, const(c_long)* src, const size_t stride, const size_t n);
64 int gsl_sort_long_largest_index (size_t* p, const size_t k, const(c_long)* src, const size_t stride, const size_t n);
65 
66 //gsl_sort_long_double
67 void gsl_sort_long_double (real* data, const size_t stride, const size_t n);
68 void gsl_sort2_long_double (real* data1, const size_t stride1, real* data2, const size_t stride2, const size_t n);
69 void gsl_sort_long_double_index (size_t* p, const(real)* data, const size_t stride, const size_t n);
70 int gsl_sort_long_double_smallest (real* dest, const size_t k, const(real)* src, const size_t stride, const size_t n);
71 int gsl_sort_long_double_smallest_index (size_t* p, const size_t k, const(real)* src, const size_t stride, const size_t n);
72 int gsl_sort_long_double_largest (real* dest, const size_t k, const(real)* src, const size_t stride, const size_t n);
73 int gsl_sort_long_double_largest_index (size_t* p, const size_t k, const(real)* src, const size_t stride, const size_t n);
74 
75 //gsl_sort_short
76 void gsl_sort_short (short* data, const size_t stride, const size_t n);
77 void gsl_sort2_short (short* data1, const size_t stride1, short* data2, const size_t stride2, const size_t n);
78 void gsl_sort_short_index (size_t* p, const(short)* data, const size_t stride, const size_t n);
79 int gsl_sort_short_smallest (short* dest, const size_t k, const(short)* src, const size_t stride, const size_t n);
80 int gsl_sort_short_smallest_index (size_t* p, const size_t k, const(short)* src, const size_t stride, const size_t n);
81 int gsl_sort_short_largest (short* dest, const size_t k, const(short)* src, const size_t stride, const size_t n);
82 int gsl_sort_short_largest_index (size_t* p, const size_t k, const(short)* src, const size_t stride, const size_t n);
83 
84 //gsl_sort_uchar
85 void gsl_sort_uchar (ubyte* data, const size_t stride, const size_t n);
86 void gsl_sort2_uchar (ubyte* data1, const size_t stride1, ubyte* data2, const size_t stride2, const size_t n);
87 void gsl_sort_uchar_index (size_t* p, const(ubyte)* data, const size_t stride, const size_t n);
88 int gsl_sort_uchar_smallest (ubyte* dest, const size_t k, const(ubyte)* src, const size_t stride, const size_t n);
89 int gsl_sort_uchar_smallest_index (size_t* p, const size_t k, const(ubyte)* src, const size_t stride, const size_t n);
90 int gsl_sort_uchar_largest (ubyte* dest, const size_t k, const(ubyte)* src, const size_t stride, const size_t n);
91 int gsl_sort_uchar_largest_index (size_t* p, const size_t k, const(ubyte)* src, const size_t stride, const size_t n);
92 
93 //gsl_sort_uint
94 void gsl_sort_uint (uint* data, const size_t stride, const size_t n);
95 void gsl_sort2_uint (uint* data1, const size_t stride1, uint* data2, const size_t stride2, const size_t n);
96 void gsl_sort_uint_index (size_t* p, const(uint)* data, const size_t stride, const size_t n);
97 int gsl_sort_uint_smallest (uint* dest, const size_t k, const(uint)* src, const size_t stride, const size_t n);
98 int gsl_sort_uint_smallest_index (size_t* p, const size_t k, const(uint)* src, const size_t stride, const size_t n);
99 int gsl_sort_uint_largest (uint* dest, const size_t k, const(uint)* src, const size_t stride, const size_t n);
100 int gsl_sort_uint_largest_index (size_t* p, const size_t k, const(uint)* src, const size_t stride, const size_t n);
101 
102 //gsl_sort_ulong
103 void gsl_sort_ulong (c_ulong* data, const size_t stride, const size_t n);
104 void gsl_sort2_ulong (c_ulong* data1, const size_t stride1, c_ulong* data2, const size_t stride2, const size_t n);
105 void gsl_sort_ulong_index (size_t* p, const(c_ulong)* data, const size_t stride, const size_t n);
106 int gsl_sort_ulong_smallest (c_ulong* dest, const size_t k, const(c_ulong)* src, const size_t stride, const size_t n);
107 int gsl_sort_ulong_smallest_index (size_t* p, const size_t k, const(c_ulong)* src, const size_t stride, const size_t n);
108 int gsl_sort_ulong_largest (c_ulong* dest, const size_t k, const(c_ulong)* src, const size_t stride, const size_t n);
109 int gsl_sort_ulong_largest_index (size_t* p, const size_t k, const(c_ulong)* src, const size_t stride, const size_t n);
110 
111 //gsl_sort_ushort
112 void gsl_sort_ushort (ushort* data, const size_t stride, const size_t n);
113 void gsl_sort2_ushort (ushort* data1, const size_t stride1, ushort* data2, const size_t stride2, const size_t n);
114 void gsl_sort_ushort_index (size_t* p, const(ushort)* data, const size_t stride, const size_t n);
115 int gsl_sort_ushort_smallest (ushort* dest, const size_t k, const(ushort)* src, const size_t stride, const size_t n);
116 int gsl_sort_ushort_smallest_index (size_t* p, const size_t k, const(ushort)* src, const size_t stride, const size_t n);
117 int gsl_sort_ushort_largest (ushort* dest, const size_t k, const(ushort)* src, const size_t stride, const size_t n);
118 int gsl_sort_ushort_largest_index (size_t* p, const size_t k, const(ushort)* src, const size_t stride, const size_t n);
119 
120 //gsl_sort_vector_char
121 void gsl_sort_vector_char (gsl_vector_char* v);
122 void gsl_sort_vector2_char (gsl_vector_char* v1, gsl_vector_char* v2);
123 int gsl_sort_vector_char_index (gsl_permutation* p, const(gsl_vector_char)* v);
124 int gsl_sort_vector_char_smallest (char* dest, const size_t k, const(gsl_vector_char)* v);
125 int gsl_sort_vector_char_largest (char* dest, const size_t k, const(gsl_vector_char)* v);
126 int gsl_sort_vector_char_smallest_index (size_t* p, const size_t k, const(gsl_vector_char)* v);
127 int gsl_sort_vector_char_largest_index (size_t* p, const size_t k, const(gsl_vector_char)* v);
128 
129 //gsl_sort_vector
130 void gsl_sort_vector (gsl_vector* v);
131 void gsl_sort_vector2 (gsl_vector* v1, gsl_vector* v2);
132 int gsl_sort_vector_index (gsl_permutation* p, const(gsl_vector)* v);
133 int gsl_sort_vector_smallest (double* dest, const size_t k, const(gsl_vector)* v);
134 int gsl_sort_vector_largest (double* dest, const size_t k, const(gsl_vector)* v);
135 int gsl_sort_vector_smallest_index (size_t* p, const size_t k, const(gsl_vector)* v);
136 int gsl_sort_vector_largest_index (size_t* p, const size_t k, const(gsl_vector)* v);
137 
138 //gsl_sort_vector_float
139 void gsl_sort_vector_float (gsl_vector_float* v);
140 void gsl_sort_vector2_float (gsl_vector_float* v1, gsl_vector_float* v2);
141 int gsl_sort_vector_float_index (gsl_permutation* p, const(gsl_vector_float)* v);
142 int gsl_sort_vector_float_smallest (float* dest, const size_t k, const(gsl_vector_float)* v);
143 int gsl_sort_vector_float_largest (float* dest, const size_t k, const(gsl_vector_float)* v);
144 int gsl_sort_vector_float_smallest_index (size_t* p, const size_t k, const(gsl_vector_float)* v);
145 int gsl_sort_vector_float_largest_index (size_t* p, const size_t k, const(gsl_vector_float)* v);
146 
147 //gsl_sort_vector_int
148 void gsl_sort_vector_int (gsl_vector_int* v);
149 void gsl_sort_vector2_int (gsl_vector_int* v1, gsl_vector_int* v2);
150 int gsl_sort_vector_int_index (gsl_permutation* p, const(gsl_vector_int)* v);
151 int gsl_sort_vector_int_smallest (int* dest, const size_t k, const(gsl_vector_int)* v);
152 int gsl_sort_vector_int_largest (int* dest, const size_t k, const(gsl_vector_int)* v);
153 int gsl_sort_vector_int_smallest_index (size_t* p, const size_t k, const(gsl_vector_int)* v);
154 int gsl_sort_vector_int_largest_index (size_t* p, const size_t k, const(gsl_vector_int)* v);
155 
156 //gsl_sort_vector_long
157 void gsl_sort_vector_long (gsl_vector_long* v);
158 void gsl_sort_vector2_long (gsl_vector_long* v1, gsl_vector_long* v2);
159 int gsl_sort_vector_long_index (gsl_permutation* p, const(gsl_vector_long)* v);
160 int gsl_sort_vector_long_smallest (c_long* dest, const size_t k, const(gsl_vector_long)* v);
161 int gsl_sort_vector_long_largest (c_long* dest, const size_t k, const(gsl_vector_long)* v);
162 int gsl_sort_vector_long_smallest_index (size_t* p, const size_t k, const(gsl_vector_long)* v);
163 int gsl_sort_vector_long_largest_index (size_t* p, const size_t k, const(gsl_vector_long)* v);
164 
165 //gsl_sort_vector_long_double
166 void gsl_sort_vector_long_double (gsl_vector_long_double* v);
167 void gsl_sort_vector2_long_double (gsl_vector_long_double* v1, gsl_vector_long_double* v2);
168 int gsl_sort_vector_long_double_index (gsl_permutation* p, const(gsl_vector_long_double)* v);
169 int gsl_sort_vector_long_double_smallest (real* dest, const size_t k, const(gsl_vector_long_double)* v);
170 int gsl_sort_vector_long_double_largest (real* dest, const size_t k, const(gsl_vector_long_double)* v);
171 int gsl_sort_vector_long_double_smallest_index (size_t* p, const size_t k, const(gsl_vector_long_double)* v);
172 int gsl_sort_vector_long_double_largest_index (size_t* p, const size_t k, const(gsl_vector_long_double)* v);
173 
174 //gsl_sort_vector_short
175 void gsl_sort_vector_short (gsl_vector_short* v);
176 void gsl_sort_vector2_short (gsl_vector_short* v1, gsl_vector_short* v2);
177 int gsl_sort_vector_short_index (gsl_permutation* p, const(gsl_vector_short)* v);
178 int gsl_sort_vector_short_smallest (short* dest, const size_t k, const(gsl_vector_short)* v);
179 int gsl_sort_vector_short_largest (short* dest, const size_t k, const(gsl_vector_short)* v);
180 int gsl_sort_vector_short_smallest_index (size_t* p, const size_t k, const(gsl_vector_short)* v);
181 int gsl_sort_vector_short_largest_index (size_t* p, const size_t k, const(gsl_vector_short)* v);
182 
183 //gsl_sort_vector_uchar
184 void gsl_sort_vector_uchar (gsl_vector_uchar* v);
185 void gsl_sort_vector2_uchar (gsl_vector_uchar* v1, gsl_vector_uchar* v2);
186 int gsl_sort_vector_uchar_index (gsl_permutation* p, const(gsl_vector_uchar)* v);
187 int gsl_sort_vector_uchar_smallest (ubyte* dest, const size_t k, const(gsl_vector_uchar)* v);
188 int gsl_sort_vector_uchar_largest (ubyte* dest, const size_t k, const(gsl_vector_uchar)* v);
189 int gsl_sort_vector_uchar_smallest_index (size_t* p, const size_t k, const(gsl_vector_uchar)* v);
190 int gsl_sort_vector_uchar_largest_index (size_t* p, const size_t k, const(gsl_vector_uchar)* v);
191 
192 //gsl_sort_vector_uint
193 void gsl_sort_vector_uint (gsl_vector_uint* v);
194 void gsl_sort_vector2_uint (gsl_vector_uint* v1, gsl_vector_uint* v2);
195 int gsl_sort_vector_uint_index (gsl_permutation* p, const(gsl_vector_uint)* v);
196 int gsl_sort_vector_uint_smallest (uint* dest, const size_t k, const(gsl_vector_uint)* v);
197 int gsl_sort_vector_uint_largest (uint* dest, const size_t k, const(gsl_vector_uint)* v);
198 int gsl_sort_vector_uint_smallest_index (size_t* p, const size_t k, const(gsl_vector_uint)* v);
199 int gsl_sort_vector_uint_largest_index (size_t* p, const size_t k, const(gsl_vector_uint)* v);
200 
201 //gsl_sort_vector_ulong
202 void gsl_sort_vector_ulong (gsl_vector_ulong* v);
203 void gsl_sort_vector2_ulong (gsl_vector_ulong* v1, gsl_vector_ulong* v2);
204 int gsl_sort_vector_ulong_index (gsl_permutation* p, const(gsl_vector_ulong)* v);
205 int gsl_sort_vector_ulong_smallest (c_ulong* dest, const size_t k, const(gsl_vector_ulong)* v);
206 int gsl_sort_vector_ulong_largest (c_ulong* dest, const size_t k, const(gsl_vector_ulong)* v);
207 int gsl_sort_vector_ulong_smallest_index (size_t* p, const size_t k, const(gsl_vector_ulong)* v);
208 int gsl_sort_vector_ulong_largest_index (size_t* p, const size_t k, const(gsl_vector_ulong)* v);
209 
210 //gsl_sort_vector_ushort
211 void gsl_sort_vector_ushort (gsl_vector_ushort* v);
212 void gsl_sort_vector2_ushort (gsl_vector_ushort* v1, gsl_vector_ushort* v2);
213 int gsl_sort_vector_ushort_index (gsl_permutation* p, const(gsl_vector_ushort)* v);
214 int gsl_sort_vector_ushort_smallest (ushort* dest, const size_t k, const(gsl_vector_ushort)* v);
215 int gsl_sort_vector_ushort_largest (ushort* dest, const size_t k, const(gsl_vector_ushort)* v);
216 int gsl_sort_vector_ushort_smallest_index (size_t* p, const size_t k, const(gsl_vector_ushort)* v);
217 int gsl_sort_vector_ushort_largest_index (size_t* p, const size_t k, const(gsl_vector_ushort)* v);