OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
cppsort.cpp
Go to the documentation of this file.
1//Copyright> OpenRadioss
2//Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3//Copyright>
4//Copyright> This program is free software: you can redistribute it and/or modify
5//Copyright> it under the terms of the GNU Affero General Public License as published by
6//Copyright> the Free Software Foundation, either version 3 of the License, or
7//Copyright> (at your option) any later version.
8//Copyright>
9//Copyright> This program is distributed in the hope that it will be useful,
10//Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11//Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12//Copyright> GNU Affero General Public License for more details.
13//Copyright>
14//Copyright> You should have received a copy of the GNU Affero General Public License
15//Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16//Copyright>
17//Copyright>
18//Copyright> Commercial Alternative: Altair Radioss Software
19//Copyright>
20//Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21//Copyright> software under a commercial license. Contact Altair to discuss further if the
22//Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23#include <algorithm>
24#include <vector>
25#include <utility>
26
27#define _FCALL
28
29#ifdef MYREAL8
30#define my_real double
31#else
32#define my_real float
33#endif
34
35
36template<typename K, typename V>
37void stlsort_generic_generic(int *len, K *keys, V *values){
38 int n = *len;
39 std::vector<std::pair<K, V>> pairs(n);
40
41 for (int i = 0; i < n; ++i) {
42 pairs[i] = std::make_pair(keys[i], values[i]);
43 }
44
45 std::sort(pairs.begin(), pairs.end(), [](const std::pair<K, V> &a, const std::pair<K, V> &b) {
46 return a.first < b.first;
47 });
48
49 for (int i = 0; i < n; ++i) {
50 keys[i] = pairs[i].first;
51 values[i] = pairs[i].second;
52 }
53}
54
55extern "C" {
56// sort array
57 void stlsort(int * len, my_real * array)
58 {
59 std::sort(array,array+ *len);
60 }
61 void stlsort__(int * len, my_real * array)
62 {
63 std::sort(array,array+ *len);
64 }
65 void _FCALL stlsort_(int * len, my_real * array)
66 {
67 std::sort(array,array+ *len);
68 }
69 void _FCALL STLSORT(int * len, my_real * array)
70 {
71 std::sort(array,array+ *len);
72 }
73 void STLSORT_(int * len, my_real * array)
74 {
75 std::sort(array,array+ *len);
76 }
77// sort array with int and key
78 void stlsort_int_int(int *len, int* keys, int *values) {
79 stlsort_generic_generic<int,int>(len, keys, values);
80 }
81 void stlsort_int_int__(int *len, int* keys, int *values) {
82 stlsort_generic_generic<int,int>(len, keys, values);
83 }
84 void _FCALL stlsort_int_int_(int *len, int* keys, int *values) {
85 stlsort_generic_generic<int,int>(len, keys, values);
86 }
87 void _FCALL STLSORT_INT_INT(int *len, int* keys, int *values) {
88 stlsort_generic_generic<int,int>(len, keys, values);
89 }
90 void STLSORT_INT_INT_(int *len, int* keys, int *values) {
91 stlsort_generic_generic<int,int>(len, keys, values);
92 }
93
94 // sort array with real and key
95 void stlsort_real_int(int *len, my_real* keys, int *values) {
96 stlsort_generic_generic<my_real,int>(len, keys, values);
97 }
98 void stlsort_real_int__(int *len, my_real* keys, int *values) {
99 stlsort_generic_generic<my_real,int>(len, keys, values);
100 }
101 void _FCALL stlsort_real_int_(int *len, my_real* keys, int *values) {
102 stlsort_generic_generic<my_real,int>(len, keys, values);
103 }
104 void _FCALL STLSORT_REAL_INT(int *len, my_real* keys, int *values) {
105 stlsort_generic_generic<my_real,int>(len, keys, values);
106 }
107 void STLSORT_REAL_INT_(int *len, my_real* keys, int *values) {
108 stlsort_generic_generic<my_real,int>(len, keys, values);
109 }
110}
111
void stlsort__(int *len, my_real *array)
Definition cppsort.cpp:61
void stlsort_int_int(int *len, int *keys, int *values)
Definition cppsort.cpp:78
void _FCALL STLSORT(int *len, my_real *array)
Definition cppsort.cpp:69
void stlsort_real_int(int *len, my_real *keys, int *values)
Definition cppsort.cpp:95
void STLSORT_(int *len, my_real *array)
Definition cppsort.cpp:73
void stlsort_generic_generic(int *len, K *keys, V *values)
Definition cppsort.cpp:37
void stlsort_int_int__(int *len, int *keys, int *values)
Definition cppsort.cpp:81
void STLSORT_REAL_INT_(int *len, my_real *keys, int *values)
Definition cppsort.cpp:107
void stlsort(int *len, my_real *array)
Definition cppsort.cpp:57
void _FCALL stlsort_real_int_(int *len, my_real *keys, int *values)
Definition cppsort.cpp:101
void STLSORT_INT_INT_(int *len, int *keys, int *values)
Definition cppsort.cpp:90
void _FCALL STLSORT_REAL_INT(int *len, my_real *keys, int *values)
Definition cppsort.cpp:104
void stlsort_real_int__(int *len, my_real *keys, int *values)
Definition cppsort.cpp:98
void _FCALL stlsort_int_int_(int *len, int *keys, int *values)
Definition cppsort.cpp:84
#define my_real
Definition cppsort.cpp:32
void _FCALL STLSORT_INT_INT(int *len, int *keys, int *values)
Definition cppsort.cpp:87
void _FCALL stlsort_(int *len, my_real *array)
Definition cppsort.cpp:65
#define _FCALL
n