adds the values starting from a given position inside the growing array.
if the requested position is outside the current array bounds, the array
will be resized accordingly. if it is inside the current array bounds, the
elements starting from the requested position will be replaced up to
the element at position pos + size(val) - 1
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(grw_linearray_type) | :: | me | ||||
type(tem_line_type), | intent(in) | :: | val(:) | |||
integer, | intent(in) | :: | pos | |||
integer, | intent(in), | optional | :: | length |
optional length to expand the array |
subroutine placeat_ga_line_vec(me, val, pos, length)
type(grw_linearray_type) :: me !< array to append the value to
type(tem_line_type), intent(in) :: val(:) !< values to append
integer, intent(in) :: pos !< predefined position
!> optional length to expand the array
integer, intent(in), optional :: length
integer :: ub, ii
if (me%nvals == huge(me%nvals)) then
write(*,*) "reached end of integer range for growing array!"
write(*,*) "aborting!!"
stop
end if
ub = pos + size(val) - 1
if (ub > me%containersize) then
! expand the array, if its boundary is reached
call expand(me = me, pos = ub, length = length)
end if
me%nvals = max( ub, me%nvals )
do ii = pos, ub
me%val(ii) = val(1+ii-pos)
end do
end subroutine placeat_ga_line_vec