vec_int64_shrink_to_fit Subroutine

private pure subroutine vec_int64_shrink_to_fit(self, err)

Release capacity beyond size().

Type Bound

vector_int64_t

Arguments

Type IntentOptional Attributes Name
class(vector_int64_t), intent(inout) :: self
type(error_t), intent(inout), optional :: err

Calls

proc~~vec_int64_shrink_to_fit~~CallsGraph proc~vec_int64_shrink_to_fit vector_int64_t%vec_int64_shrink_to_fit proc~error_raise error_raise proc~vec_int64_shrink_to_fit->proc~error_raise proc~vec_int64_capacity vector_int64_t%vec_int64_capacity proc~vec_int64_shrink_to_fit->proc~vec_int64_capacity proc~error_set error_t%error_set proc~error_raise->proc~error_set

Called by

proc~~vec_int64_shrink_to_fit~~CalledByGraph proc~vec_int64_shrink_to_fit vector_int64_t%vec_int64_shrink_to_fit proc~vec_int64_take vector_int64_t%vec_int64_take proc~vec_int64_take->proc~vec_int64_shrink_to_fit

Variables

Type Visibility Attributes Name Initial
integer(kind=int64), private, allocatable :: exact(:)
integer, private :: stat

Source Code

   pure subroutine vec_int64_shrink_to_fit(self, err)
      !! Release capacity beyond `size()`.
      class(vector_int64_t), intent(inout) :: self
      type(error_t), intent(inout), optional :: err

      integer(int64), allocatable :: exact(:)
      integer :: stat

      if (.not. allocated(self%items)) return
      if (vec_int64_capacity(self) == self%n_items) return

      allocate (exact(self%n_items), stat=stat)
      if (.not. allocated(exact)) then
         call error_raise(err, ERROR_ALLOC, "vector_int64_t: shrink_to_fit allocation failed.")
         return
      end if

      if (self%n_items > 0) exact(1:self%n_items) = self%items(1:self%n_items)
      call move_alloc(exact, self%items)
   end subroutine vec_int64_shrink_to_fit