@brief Re-sizeable array type that can be filled elementwise to build up a contiguous data chunk that can then be dumped to an allocatable
@details For multidimensional buffers only the last dimension can grow. (i.e. it is only possible to add columns.)
The buffer has to be initiliazed before first use.
After dumping (dump_reset
) it is automatically resetted.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=int32), | private, | dimension(:), allocatable | :: | buf | |||
integer(kind=int64), | private | :: | pos | ||||
real(kind=dp), | private | :: | grow_factor | = | 1.5_dp | ||
integer(kind=int64), | private | :: | start_size | = | 100_int64 |
@brief Set up the re-sizeable array (buffer) with a given start size and grow_factor.
@details Has to be called before first use and can be called any time.
@param[in] start_size Initial size of the buffer. @param[in] grow_factor Factor about which to grow the buffer, if the capacity is not sufficient.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(inout) | :: | this | |||
real(kind=dp), | intent(in), | optional | :: | grow_factor | ||
integer(kind=int64), | intent(in), | optional | :: | start_size |
@brief Deallocate the resource.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(inout) | :: | this |
@brief Reset an already initiliazed buffer.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(inout) | :: | this |
@brief Returns the number of already stored elements in the buffer along the last dimension.
@return n_els Number of elements already added to the buffer.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(in) | :: | this |
@brief Returns the capacity of the buffer along the last dimension.
@return n_els Number of elements already added to the buffer.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(in) | :: | this |
@brief Append a value to the buffer, expanding the capacity if necessary.
@param[in] val Value to be added
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(inout) | :: | this | |||
integer(kind=int32), | intent(in) | :: | val |
@brief Dump the buffer to an allocatable array.
@param[out] tgt Allocatable array (reset upon entry), contains the stored elements of the buffer on return. The buffer has to be reinitialized if used again.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(inout) | :: | this | |||
integer(kind=int32), | intent(out), | dimension(:), allocatable | :: | tgt |
Dump the buffer to an allocatable array and reset the buffer.
@param[out] tgt Allocatable array (reset upon entry), contains the stored elements of the buffer on return. The buffer is writable afterwards.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(buffer_int32_1D_t), | intent(inout) | :: | this | |||
integer(kind=int32), | intent(out), | dimension(:), allocatable | :: | tgt |
type :: buffer_int32_1D_t
private
integer(int32), dimension(:), allocatable :: buf
! Internal position of the buffer
integer(int64) :: pos
real(dp) :: grow_factor = 1.5_dp
integer(int64) :: start_size = 100_int64
contains
procedure :: init => init_int32_1D
procedure :: finalize => finalize_int32_1D
procedure, private :: reset => reset_int32_1D
procedure :: size => get_size_int32_1D
procedure :: capacity => get_capacity_int32_1D
procedure :: push_back => add_val_int32_1D
procedure, private :: dump => dump_int32_1D
procedure :: dump_reset => dump_reset_int32_1D
end type buffer_int32_1D_t