The capacity to grow to for needed points: twice the current, or what is
needed and a quarter more (so that appending after a large bulk add
doesn't copy everything at once); exact (reserve): what is needed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | current |
current capacity |
||
| integer, | intent(in) | :: | needed |
points needed |
||
| logical, | intent(in), | optional | :: | exact |
(true: what is needed (default false)) |
pure integer function new_capacity(current, needed, exact) integer, intent(in) :: current !! current capacity integer, intent(in) :: needed !! points needed logical, intent(in), optional :: exact !! (true: what is needed (default false)) new_capacity = max(needed + needed / 4, 2 * current, 16) if (present(exact)) then if (exact) new_capacity = needed end if end function new_capacity