1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//
// GENERATED FILE
//
use super::*;
use f2rust_std::*;
//$Procedure M2SHLL ( Shell sort an array of Meta/2 syntaxs )
pub fn M2SHLL(NDIM: i32, ARRAY: CharArrayMut) {
let mut ARRAY = DummyCharArrayMut::new(ARRAY, None, 1..);
let mut GAP: i32 = 0;
let mut EJ: i32 = 0;
let mut EJG: i32 = 0;
let mut J: i32 = 0;
let mut K: i32 = 0;
let mut KG: i32 = 0;
let mut JG: i32 = 0;
let mut SWAP: bool = false;
//
// SPICELIB Functions
//
//
// Local variables
//
//
// This is a straightforward implementation of the Shell Sort
// algorithm.
//
GAP = (NDIM / 2);
while (GAP > 0) {
for I in (GAP + 1)..=NDIM {
J = (I - GAP);
while (J > 0) {
JG = (J + GAP);
K = J;
KG = JG;
EJ = spicelib::POS(&ARRAY[J], b"[", 1);
EJG = spicelib::POS(&ARRAY[JG], b"[", 1);
if (EJ > 1) {
fstr::assign(fstr::substr_mut(ARRAY.get_mut(J), EJ..=EJ), b" ");
}
if (EJG > 1) {
fstr::assign(fstr::substr_mut(ARRAY.get_mut(JG), EJG..=EJG), b" ");
}
if fstr::le(&ARRAY[J], &ARRAY[JG]) {
J = 0;
SWAP = false;
} else {
SWAP = true;
}
if (EJ > 1) {
fstr::assign(fstr::substr_mut(ARRAY.get_mut(K), EJ..=EJ), b"[");
}
if (EJG > 1) {
fstr::assign(fstr::substr_mut(ARRAY.get_mut(KG), EJG..=EJG), b"[");
}
if SWAP {
spicelib::SWAPC_ARRAY(
ARRAY.subscript(J),
ARRAY.subscript(JG),
ARRAY.as_arg_mut(),
);
}
J = (J - GAP);
}
}
GAP = (GAP / 2);
}
}