22 integer,
allocatable,
dimension(:) :: entry
35 integer_varray%n_entry = 0
36 allocate(integer_varray%entry(0))
48 integer,
intent(in) :: n_entry
50 integer_varray%n_entry = n_entry
51 allocate(integer_varray%entry(n_entry))
52 integer_varray%entry = 0
64 deallocate(integer_varray%entry)
80 integer,
intent(in) :: new_length
82 integer,
dimension(integer_varray%n_entry) :: temp_array
84 call
assert(753399394, new_length >= integer_varray%n_entry)
85 temp_array = integer_varray%entry(1:integer_varray%n_entry)
86 deallocate(integer_varray%entry)
87 allocate(integer_varray%entry(new_length))
88 integer_varray%entry(1:integer_varray%n_entry) = temp_array
100 integer_varray%entry = 0
101 integer_varray%n_entry = 0
117 integer_varray_from%n_entry)
118 integer_varray_to%entry(1:integer_varray_from%n_entry) &
119 = integer_varray_from%entry(1:integer_varray_from%n_entry)
133 integer :: length, new_length
135 length =
size(integer_varray%entry)
136 new_length = max(length * 2, length + 1)
149 integer,
intent(in) :: n
151 do while (
size(integer_varray%entry) < n)
166 integer :: length, new_length
168 length =
size(integer_varray%entry)
169 new_length = length / 2
170 do while ((integer_varray%n_entry <= new_length) .and. (length > 0))
172 length =
size(integer_varray%entry)
173 new_length = length / 2
186 integer,
intent(in) :: val
190 n = integer_varray%n_entry + 1
192 integer_varray%entry(n) = val
193 integer_varray%n_entry = n
206 integer,
intent(in) :: index
208 call
assert(541032660, index >= 1)
209 call
assert(385739765, index <= integer_varray%n_entry)
210 if (index < integer_varray%n_entry)
then
212 integer_varray%entry(index) &
213 = integer_varray%entry(integer_varray%n_entry)
216 integer_varray%entry(integer_varray%n_entry) = 0
217 integer_varray%n_entry = integer_varray%n_entry - 1
230 integer :: total_size
233 total_size = total_size &
245 character,
intent(inout) :: buffer(:)
247 integer,
intent(inout) :: position
252 integer :: prev_position
254 prev_position = position
256 val%entry(1:val%n_entry))
269 character,
intent(inout) :: buffer(:)
271 integer,
intent(inout) :: position
276 integer :: prev_position
278 integer,
pointer,
dimension(:) :: tmp_entry
280 prev_position = position
281 allocate(tmp_entry(0))
285 val%entry = tmp_entry
286 deallocate(tmp_entry)
subroutine integer_varray_enlarge(integer_varray)
Enlarges the given integer_varray by at least one element.
subroutine integer_varray_shrink(integer_varray)
Possibly shrinks the storage of the given array, ensuring that it can still store the used entries...
The integer_varray_t structure and assocated subroutines.
elemental subroutine integer_varray_allocate_size(integer_varray, n_entry)
Allocates a structure with the given size.
subroutine integer_varray_append(integer_varray, val)
Adds the given number to the end of the array.
subroutine integer_varray_enlarge_to(integer_varray, n)
Enlarges the given array so that it is at least of size n.
subroutine integer_varray_remove_entry(integer_varray, index)
Removes the entry at the given index, repacking values to maintain contiguous data.
subroutine integer_varray_copy(integer_varray_from, integer_varray_to)
Copies an integer_varray.
Common utility subroutines.
elemental subroutine integer_varray_deallocate(integer_varray)
Deallocates a previously allocated structure.
elemental subroutine integer_varray_zero(integer_varray)
Resets an integer_varray to have zero particles per bin.
Wrapper functions for MPI.
subroutine pmc_mpi_unpack_integer_array(buffer, position, val)
Unpacks the given value from the buffer, advancing position.
elemental subroutine integer_varray_allocate(integer_varray)
Allocates an empty structure.
subroutine pmc_mpi_pack_integer_varray(buffer, position, val)
Packs the given value into the buffer, advancing position.
A variable-length 1D array of integers.
subroutine integer_varray_reallocate(integer_varray, new_length)
Changes the given integer_varray to exactly the given new_length.
integer function pmc_mpi_pack_size_integer_array(val)
Determines the number of bytes required to pack the given value.
subroutine pmc_mpi_unpack_integer_varray(buffer, position, val)
Unpacks the given value from the buffer, advancing position.
integer function pmc_mpi_pack_size_integer_varray(val)
Determines the number of bytes required to pack the given value.
subroutine assert(code, condition_ok)
Errors unless condition_ok is true.
subroutine pmc_mpi_pack_integer_array(buffer, position, val)
Packs the given value into the buffer, advancing position.