@@ -55,22 +55,24 @@ static RETURN_TYPE FUNCNAME##_cmp(ARGS, bool (*cmp)(T, T)) {
5555
5656%enddef
5757
58- /* *****************************
58+ /* -------------------------------------------------------------------------
5959 * Types
60- ***************************** */
60+ * ------------------------------------------------------------------------- */
6161
62- // >>> Index integer type
62+ // Alias the native C integer to an "indexing" integer returned by algorithm
63+ // functions.
6364%inline %{
6465typedef int index_int;
6566%}
6667%insert(" fdecl" ) %{integer, parameter, public :: INDEX_INT = C_INT
6768%}
6869
70+ // Give it a particularly named type in the Fortran proxy code.
6971%apply int { index_int };
7072%typemap(ftype, in={integer (INDEX_INT), intent (in)}) index_int
71- %{integer (INDEX_INT)%}
73+ %{integer (INDEX_INT)%}
7274
73- // >>> Array types
75+ // Apply array-to-C translation for numeric values
7476%apply (SWIGTYPE *DATA, size_t SIZE) { (index_int *IDX, size_t IDXSIZE) };
7577
7678%apply (const SWIGTYPE *DATA, size_t SIZE) {
@@ -82,22 +84,22 @@ typedef int index_int;
8284 (const double *DATA2, size_t DATASIZE2) };
8385
8486
85- // >>> Function pointer types
87+ // Make function pointers available as generic types
8688%typemap(fin) bool (*)(SWIGTYPE, SWIGTYPE)
8789 " $1 = c_funloc($input)"
8890%typemap(findecl, match=" fin" ) bool (*)(SWIGTYPE, SWIGTYPE) " "
8991%typemap(fout) bool (*)(CTYPE, CTYPE)
9092 " call c_f_procpointer($1, $result)"
9193%typemap(foutdecl, match=" fout" ) bool (*)(SWIGTYPE, SWIGTYPE) " "
9294
93- %flc_cmp_funptr(int32_t , integer(C_INT32_T))
94- %flc_cmp_funptr(int64_t , integer(C_INT64_T))
95- %flc_cmp_funptr(double , real(C_DOUBLE))
96- %flc_cmp_funptr(index_int, integer(INDEX_INT))
95+ %flc_cmp_funptr(int32_t , integer(C_INT32_T))
96+ %flc_cmp_funptr(int64_t , integer(C_INT64_T))
97+ %flc_cmp_funptr(double , real(C_DOUBLE))
98+ %flc_cmp_funptr(index_int, integer(INDEX_INT))
9799
98- /* *****************************
99- * Sorting
100- ***************************** */
100+ /* -------------------------------------------------------------------------
101+ * Sorting routines
102+ * ------------------------------------------------------------------------- */
101103
102104%{
103105template <class T , class Compare >
@@ -130,21 +132,25 @@ static void argsort_impl(const T *data, size_t size,
130132
131133%}
132134
133- %flc_cmp_algorithm(void , sort, %arg(T *DATA, size_t DATASIZE),
135+ %flc_cmp_algorithm(void , sort,
136+ %arg(T *DATA, size_t DATASIZE),
134137 %arg(DATA, DATASIZE))
135- %flc_cmp_algorithm(bool , is_sorted, %arg(const T *DATA, size_t DATASIZE),
138+ %flc_cmp_algorithm(bool , is_sorted,
139+ %arg(const T *DATA, size_t DATASIZE),
136140 %arg(DATA, DATASIZE))
137- %flc_cmp_algorithm(void , argsort, %arg(const T *DATA, size_t DATASIZE,
138- index_int *IDX, size_t IDXSIZE),
141+ %flc_cmp_algorithm(void , argsort,
142+ %arg(const T *DATA, size_t DATASIZE,
143+ index_int *IDX, size_t IDXSIZE),
139144 %arg(DATA, DATASIZE, IDX, IDXSIZE))
140145
141- /* *****************************
142- * Searching
143- ***************************** */
146+ /* -------------------------------------------------------------------------
147+ * Searching routines
148+ * ------------------------------------------------------------------------- */
144149
145150%{
146151template <class T , class Compare >
147- static index_int binary_search_impl (const T *data, size_t size, T value, Compare cmp) {
152+ static index_int binary_search_impl (const T *data, size_t size, T value,
153+ Compare cmp) {
148154 const T *end = data + size;
149155 auto iter = std::lower_bound (data, end, value, cmp);
150156 if (iter == end || cmp (*iter, value) || cmp (value, *iter))
@@ -154,7 +160,9 @@ static index_int binary_search_impl(const T *data, size_t size, T value, Compare
154160}
155161
156162template <class T , class Compare >
157- static void equal_range_impl (const T *data, size_t size, T value, index_int &first_index, index_int &last_index, Compare cmp) {
163+ static void equal_range_impl (const T *data, size_t size, T value,
164+ index_int &first_index, index_int &last_index,
165+ Compare cmp) {
158166 const T *end = data + size;
159167 auto range_pair = std::equal_range (data, end, value, cmp);
160168 // Index of the min/max items *IN FORTAN INDEXING*
@@ -163,7 +171,9 @@ static void equal_range_impl(const T *data, size_t size, T value, index_int &fir
163171}
164172
165173template <class T , class Compare >
166- static void minmax_element_impl (const T *data, size_t size, index_int &min_index, index_int &max_index, Compare cmp) {
174+ static void minmax_element_impl (const T *data, size_t size,
175+ index_int &min_index, index_int &max_index,
176+ Compare cmp) {
167177 const T *end = data + size;
168178 auto mm_pair = std::minmax_element (data, end, cmp);
169179 // Index of the min/max items *IN FORTAN INDEXING*
@@ -172,37 +182,41 @@ static void minmax_element_impl(const T *data, size_t size, index_int &min_index
172182}
173183%}
174184
175- %flc_cmp_algorithm(index_int, binary_search, %arg( const T *DATA, size_t DATASIZE,
176- T value),
185+ %flc_cmp_algorithm(index_int, binary_search,
186+ %arg( const T *DATA, size_t DATASIZE, T value),
177187 %arg(DATA, DATASIZE, value))
178188
179- %flc_cmp_algorithm(void , equal_range, %arg( const T *DATA, size_t DATASIZE,
180- T value,
181- index_int &first_index, index_int &last_index),
189+ %flc_cmp_algorithm(void , equal_range,
190+ %arg( const T *DATA, size_t DATASIZE, T value,
191+ index_int &first_index, index_int &last_index),
182192 %arg(DATA, DATASIZE, value, first_index, last_index))
183193
184- %flc_cmp_algorithm(void , minmax_element, %arg(const T *DATA, size_t DATASIZE,
185- index_int &min_index, index_int &max_index),
194+ %flc_cmp_algorithm(void , minmax_element,
195+ %arg(const T *DATA, size_t DATASIZE,
196+ index_int &min_index, index_int &max_index),
186197 %arg(DATA, DATASIZE, min_index, max_index))
187198
188- /* *****************************
189- * Set operations
190- ***************************** */
199+ /* -------------------------------------------------------------------------
200+ * Set operation routines
201+ * ------------------------------------------------------------------------- */
191202
192203%{
193204template <class T , class Compare >
194- static bool includes_impl (const T *data1, size_t size1, const T *data2, size_t size2, Compare cmp) {
205+ static bool includes_impl (const T *data1, size_t size1,
206+ const T *data2, size_t size2,
207+ Compare cmp) {
195208 return std::includes (data1, data1 + size1, data2, data2 + size2, cmp);
196209}
197210%}
198211
199- %flc_cmp_algorithm(bool , includes, %arg(const T *DATA1, size_t DATASIZE1,
200- const T *DATA2, size_t DATASIZE2),
212+ %flc_cmp_algorithm(bool , includes,
213+ %arg(const T *DATA1, size_t DATASIZE1,
214+ const T *DATA2, size_t DATASIZE2),
201215 %arg(DATA1, DATASIZE1, DATA2, DATASIZE2))
202216
203- /* *****************************
204- * Reordering
205- ***************************** */
217+ /* -------------------------------------------------------------------------
218+ * Modifying routines
219+ * ------------------------------------------------------------------------- */
206220
207221%{
208222#include < random>
0 commit comments