Go to the documentation of this file.
22 integer,
allocatable :: entry(:)
35 if (
allocated(integer_varray%entry))
then
54 integer,
intent(in) :: new_length
56 integer,
allocatable :: new_entries(:)
58 if (.not.
allocated(integer_varray%entry))
then
59 allocate(integer_varray%entry(new_length))
60 integer_varray%n_entry = 0
64 call assert(479324776, new_length >= integer_varray%n_entry)
65 allocate(new_entries(new_length))
66 new_entries(:integer_varray%n_entry) &
67 = integer_varray%entry(1:integer_varray%n_entry)
68 call move_alloc(new_entries, integer_varray%entry)
80 integer_varray%n_entry = 0
81 if (
allocated(integer_varray%entry))
then
82 deallocate(integer_varray%entry)
95 integer,
intent(in) :: n
97 if (.not.
allocated(integer_varray%entry))
then
102 if (n <=
size(integer_varray%entry))
return
117 integer :: length, new_length
119 if (.not.
allocated(integer_varray%entry))
return
121 new_length =
pow2_above(integer_varray%n_entry)
122 if (new_length <
size(integer_varray%entry))
then
136 integer,
intent(in) :: val
140 n = integer_varray%n_entry + 1
142 integer_varray%entry(n) = val
143 integer_varray%n_entry = n
156 integer,
intent(in) :: index
158 call assert(302759108,
allocated(integer_varray%entry))
159 call assert(541032660, index >= 1)
160 call assert(385739765, index <= integer_varray%n_entry)
161 if (index < integer_varray%n_entry)
then
163 integer_varray%entry(index) &
164 = integer_varray%entry(integer_varray%n_entry)
167 integer_varray%entry(integer_varray%n_entry) = 0
168 integer_varray%n_entry = integer_varray%n_entry - 1
181 logical :: is_allocated
182 integer,
allocatable :: tmp_entry(:)
183 integer :: total_size
185 is_allocated =
allocated(val%entry)
187 if (is_allocated)
then
188 tmp_entry = val%entry(1:val%n_entry)
189 total_size = total_size &
202 character,
intent(inout) :: buffer(:)
204 integer,
intent(inout) :: position
209 logical :: is_allocated
210 integer :: prev_position
211 integer,
allocatable :: tmp_entry(:)
213 prev_position = position
214 is_allocated =
allocated(val%entry)
216 if (is_allocated)
then
217 tmp_entry = val%entry(1:val%n_entry)
232 character,
intent(inout) :: buffer(:)
234 integer,
intent(inout) :: position
239 integer :: prev_position
240 logical :: is_allocated
241 integer,
allocatable :: tmp_entry(:)
243 prev_position = position
245 if (is_allocated)
then
248 val%entry(1:
size(tmp_entry)) = tmp_entry
250 if (
allocated(val%entry))
then
251 deallocate(val%entry)
Wrapper functions for MPI.
elemental subroutine integer_varray_zero(integer_varray)
Resets an integer_varray to have zero entries.
subroutine pmc_mpi_unpack_integer_array(buffer, position, val)
Unpacks the given value from the buffer, advancing position.
subroutine pmc_mpi_pack_integer_array(buffer, position, val)
Packs the given value into the buffer, advancing position.
subroutine pmc_mpi_pack_logical(buffer, position, val)
Packs the given value into the buffer, advancing position.
integer function pow2_above(n)
Return the least power-of-2 that is at least equal to n.
subroutine assert(code, condition_ok)
Errors unless condition_ok is true.
integer function pmc_mpi_pack_size_integer_varray(val)
Determines the number of bytes required to pack the given value.
elemental integer function integer_varray_n_entry(integer_varray)
Return the current number of entries.
integer function pmc_mpi_pack_size_logical(val)
Determines the number of bytes required to pack the given value.
The integer_varray_t structure and assocated subroutines.
subroutine integer_varray_shrink(integer_varray)
Possibly shrinks the storage of the given array, ensuring that it can still store the used entries.
A variable-length 1D array of integers.
subroutine integer_varray_remove_entry(integer_varray, index)
Removes the entry at the given index, repacking values to maintain contiguous data.
subroutine pmc_mpi_pack_integer_varray(buffer, position, val)
Packs the given value into the buffer, advancing position.
subroutine integer_varray_realloc(integer_varray, new_length)
Changes the given integer_varray to exactly the given new_length.
subroutine pmc_mpi_unpack_logical(buffer, position, val)
Unpacks the given value from the buffer, advancing position.
subroutine pmc_mpi_unpack_integer_varray(buffer, position, val)
Unpacks the given value from the buffer, advancing position.
subroutine integer_varray_enlarge(integer_varray, n)
Enlarges the given array so that it is at least of size n.
integer function pmc_mpi_pack_size_integer_array(val)
Determines the number of bytes required to pack the given value.
Common utility subroutines.
subroutine integer_varray_append(integer_varray, val)
Adds the given number to the end of the array.