13
13
contains
14
14
! For int8, radix sort becomes counting sort, so buffer is not needed
15
15
pure subroutine radix_sort_u8_helper (N , arr )
16
- integer (kind= int_size ), intent (in ) :: N
16
+ integer (kind= int_index ), intent (in ) :: N
17
17
integer (kind= int8), dimension (N), intent (inout ) :: arr
18
- integer (kind= int_size ) :: i
18
+ integer (kind= int_index ) :: i
19
19
integer :: bin_idx
20
- integer (kind= int_size ), dimension (- 128 :127 ) :: counts
20
+ integer (kind= int_index ), dimension (- 128 :127 ) :: counts
21
21
counts(:) = 0
22
22
do i = 1 , N
23
23
bin_idx = arr(i)
@@ -34,12 +34,12 @@ pure subroutine radix_sort_u8_helper(N, arr)
34
34
end subroutine
35
35
36
36
pure subroutine radix_sort_u16_helper (N , arr , buf )
37
- integer (kind= int_size ), intent (in ) :: N
37
+ integer (kind= int_index ), intent (in ) :: N
38
38
integer (kind= int16), dimension (N), intent (inout ) :: arr
39
39
integer (kind= int16), dimension (N), intent (inout ) :: buf
40
- integer (kind= int_size ) :: i
40
+ integer (kind= int_index ) :: i
41
41
integer :: b, b0, b1
42
- integer (kind= int_size ), dimension (0 :radix_mask) :: c0, c1
42
+ integer (kind= int_index ), dimension (0 :radix_mask) :: c0, c1
43
43
c0(:) = 0
44
44
c1(:) = 0
45
45
do i = 1 , N
@@ -65,12 +65,12 @@ pure subroutine radix_sort_u16_helper(N, arr, buf)
65
65
end subroutine
66
66
67
67
pure subroutine radix_sort_u32_helper (N , arr , buf )
68
- integer (kind= int_size ), intent (in ) :: N
68
+ integer (kind= int_index ), intent (in ) :: N
69
69
integer (kind= int32), dimension (N), intent (inout ) :: arr
70
70
integer (kind= int32), dimension (N), intent (inout ) :: buf
71
- integer (kind= int_size ) :: i
71
+ integer (kind= int_index ) :: i
72
72
integer :: b, b0, b1, b2, b3
73
- integer (kind= int_size ), dimension (0 :radix_mask) :: c0, c1, c2, c3
73
+ integer (kind= int_index ), dimension (0 :radix_mask) :: c0, c1, c2, c3
74
74
c0(:) = 0
75
75
c1(:) = 0
76
76
c2(:) = 0
@@ -114,12 +114,12 @@ pure subroutine radix_sort_u32_helper(N, arr, buf)
114
114
end subroutine radix_sort_u32_helper
115
115
116
116
pure subroutine radix_sort_u64_helper (N , arr , buffer )
117
- integer (kind= int_size ), intent (in ) :: N
117
+ integer (kind= int_index ), intent (in ) :: N
118
118
integer (kind= int64), dimension (N), intent (inout ) :: arr
119
119
integer (kind= int64), dimension (N), intent (inout ) :: buffer
120
- integer (kind= int_size ) :: i
120
+ integer (kind= int_index ) :: i
121
121
integer (kind= int64) :: b, b0, b1, b2, b3, b4, b5, b6, b7
122
- integer (kind= int_size ), dimension (0 :radix_mask) :: c0, c1, c2, c3, c4, c5, c6, c7
122
+ integer (kind= int_index ), dimension (0 :radix_mask) :: c0, c1, c2, c3, c4, c5, c6, c7
123
123
c0(:) = 0
124
124
c1(:) = 0
125
125
c2(:) = 0
@@ -202,8 +202,8 @@ pure module subroutine int8_radix_sort(array, reverse)
202
202
integer (kind= int8), dimension (:), intent (inout ) :: array
203
203
logical , intent (in ), optional :: reverse
204
204
integer (kind= int8) :: item
205
- integer (kind= int_size ) :: i, N
206
- N = size (array, kind= int_size )
205
+ integer (kind= int_index ) :: i, N
206
+ N = size (array, kind= int_index )
207
207
call radix_sort_u8_helper(N, array)
208
208
if (optval(reverse, .false. )) then
209
209
do i = 1 , N/ 2
@@ -218,13 +218,13 @@ pure module subroutine int16_radix_sort(array, work, reverse)
218
218
integer (kind= int16), dimension (:), intent (inout ) :: array
219
219
integer (kind= int16), dimension (:), intent (inout ), target , optional :: work
220
220
logical , intent (in ), optional :: reverse
221
- integer (kind= int_size ) :: i, N, start, middle, end
221
+ integer (kind= int_index ) :: i, N, start, middle, end
222
222
integer (kind= int16), dimension (:), pointer :: buffer
223
223
integer (kind= int16) :: item
224
224
logical :: use_internal_buffer
225
- N = size (array, kind= int_size )
225
+ N = size (array, kind= int_index )
226
226
if (present (work)) then
227
- if (size (work, kind= int_size ) < N) then
227
+ if (size (work, kind= int_index ) < N) then
228
228
error stop " int16_radix_sort: work array is too small."
229
229
end if
230
230
use_internal_buffer = .false.
@@ -270,13 +270,13 @@ pure module subroutine int32_radix_sort(array, work, reverse)
270
270
integer (kind= int32), dimension (:), intent (inout ) :: array
271
271
integer (kind= int32), dimension (:), intent (inout ), target , optional :: work
272
272
logical , intent (in ), optional :: reverse
273
- integer (kind= int_size ) :: i, N, start, middle, end
273
+ integer (kind= int_index ) :: i, N, start, middle, end
274
274
integer (kind= int32), dimension (:), pointer :: buffer
275
275
integer (kind= int32) :: item
276
276
logical :: use_internal_buffer
277
- N = size (array, kind= int_size )
277
+ N = size (array, kind= int_index )
278
278
if (present (work)) then
279
- if (size (work, kind= int_size ) < N) then
279
+ if (size (work, kind= int_index ) < N) then
280
280
error stop " int32_radix_sort: work array is too small."
281
281
end if
282
282
use_internal_buffer = .false.
@@ -320,14 +320,14 @@ module subroutine sp_radix_sort(array, work, reverse)
320
320
real (kind= sp), dimension (:), intent (inout ), target :: array
321
321
real (kind= sp), dimension (:), intent (inout ), target , optional :: work
322
322
logical , intent (in ), optional :: reverse
323
- integer (kind= int_size ) :: i, N, pos, rev_pos
323
+ integer (kind= int_index ) :: i, N, pos, rev_pos
324
324
integer (kind= int32), dimension (:), pointer :: arri32
325
325
integer (kind= int32), dimension (:), pointer :: buffer
326
326
real (kind= sp) :: item
327
327
logical :: use_internal_buffer
328
- N = size (array, kind= int_size )
328
+ N = size (array, kind= int_index )
329
329
if (present (work)) then
330
- if (size (work, kind= int_size ) < N) then
330
+ if (size (work, kind= int_index ) < N) then
331
331
error stop " sp_radix_sort: work array is too small."
332
332
end if
333
333
use_internal_buffer = .false.
@@ -373,13 +373,13 @@ pure module subroutine int64_radix_sort(array, work, reverse)
373
373
integer (kind= int64), dimension (:), intent (inout ) :: array
374
374
integer (kind= int64), dimension (:), intent (inout ), target , optional :: work
375
375
logical , intent (in ), optional :: reverse
376
- integer (kind= int_size ) :: i, N, start, middle, end
376
+ integer (kind= int_index ) :: i, N, start, middle, end
377
377
integer (kind= int64), dimension (:), pointer :: buffer
378
378
integer (kind= int64) :: item
379
379
logical :: use_internal_buffer
380
- N = size (array, kind= int_size )
380
+ N = size (array, kind= int_index )
381
381
if (present (work)) then
382
- if (size (work, kind= int_size ) < N) then
382
+ if (size (work, kind= int_index ) < N) then
383
383
error stop " int64_radix_sort: work array is too small."
384
384
end if
385
385
use_internal_buffer = .false.
@@ -423,14 +423,14 @@ module subroutine dp_radix_sort(array, work, reverse)
423
423
real (kind= dp), dimension (:), intent (inout ), target :: array
424
424
real (kind= dp), dimension (:), intent (inout ), target , optional :: work
425
425
logical , intent (in ), optional :: reverse
426
- integer (kind= int_size ) :: i, N, pos, rev_pos
426
+ integer (kind= int_index ) :: i, N, pos, rev_pos
427
427
integer (kind= int64), dimension (:), pointer :: arri64
428
428
integer (kind= int64), dimension (:), pointer :: buffer
429
429
real (kind= dp) :: item
430
430
logical :: use_internal_buffer
431
- N = size (array, kind= int_size )
431
+ N = size (array, kind= int_index )
432
432
if (present (work)) then
433
- if (size (work, kind= int_size ) < N) then
433
+ if (size (work, kind= int_index ) < N) then
434
434
error stop " sp_radix_sort: work array is too small."
435
435
end if
436
436
use_internal_buffer = .false.
0 commit comments