subroutineaddpure
pure subroutine add(b, text)
Append text to b.
Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
| b | type(buffer_t) | inout | the buffer | |
| text | character(len=*) | in | the text |
Source
Show the code
pure subroutine add(b, text)
type(buffer_t), intent(inout) :: b !! the buffer
character(len=*), intent(in) :: text !! the text
character(len=:), allocatable :: grown
integer :: capacity
if (.not. allocated(b%s)) allocate (character(len=max(256, 2*len(text))) :: b%s)
capacity = len(b%s)
if (b%n + len(text) > capacity) then
allocate (character(len=max(2*capacity, b%n + len(text))) :: grown)
grown(1:b%n) = b%s(1:b%n)
call move_alloc(grown, b%s)
end if
b%s(b%n + 1:b%n + len(text)) = text
b%n = b%n + len(text)
end subroutine add