Resize a default logical field.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| logical, | intent(inout), | allocatable | :: | values(:) | ||
| integer(kind=default_int), | intent(in) | :: | new_capacity | |||
| integer(kind=default_int), | intent(in) | :: | keep | |||
| integer(kind=default_int), | intent(in) | :: | fill_to | |||
| type(error_t), | intent(inout) | :: | err |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | private, | allocatable | :: | buffer(:) | |||
| integer(kind=default_int), | private | :: | stat |
subroutine soa_resize_logical_field(values, new_capacity, keep, fill_to, err) !! Resize a default `logical` field. logical, allocatable, intent(inout) :: values(:) integer(default_int), intent(in) :: new_capacity integer(default_int), intent(in) :: keep integer(default_int), intent(in) :: fill_to type(error_t), intent(inout) :: err logical, allocatable :: buffer(:) integer(default_int) :: stat call soa_check_resize_args(new_capacity, keep, fill_to, err) if (err%has_error()) return if (allocated(values)) then if (size(values, kind=default_int) == new_capacity) then if (fill_to > keep) values(keep + 1:fill_to) = .false. return end if end if allocate (buffer(new_capacity), stat=stat) call soa_check_alloc(stat, "resizing a logical field", err) if (err%has_error()) return if (keep > 0) buffer(1:keep) = values(1:keep) if (fill_to > keep) buffer(keep + 1:fill_to) = .false. call move_alloc(buffer, values) end subroutine soa_resize_logical_field