buffer_int32_2D_t Derived Type

type, public :: buffer_int32_2D_t

@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.


Components

Type Visibility Attributes Name Initial
integer(kind=int32), public, 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

Type-Bound Procedures

procedure, public :: init => init_int32_2D

  • private pure subroutine init_int32_2D(this, rows, grow_factor, start_size)

    @brief Set up the re-sizeable array (buffer) with a given start size and grow_factor.

    Read more…

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(inout) :: this
    integer, intent(in) :: rows

    Number of rows in the first dimension.

    real, intent(in), optional :: grow_factor

    Factor about which to grow the buffer along the last dimension,

    integer, intent(in), optional :: start_size

    Initial size of the buffer along the last dimension.

procedure, public :: finalize => finalize_int32_2D

  • private pure subroutine finalize_int32_2D(this)

    @brief Deallocate the resource.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(inout) :: this

procedure, private :: reset => reset_int32_2D

  • private pure subroutine reset_int32_2D(this)

    @brief Reset an already initiliazed buffer.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(inout) :: this

procedure, public :: size => get_size_int32_2D

  • private pure function get_size_int32_2D(this) result(n_els)

    @brief Returns the number of already stored elements in the buffer along the last dimension.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(in) :: this

    Return Value integer(kind=int64)

procedure, public :: capacity => get_capacity_int32_2D

  • private pure function get_capacity_int32_2D(this) result(capacity)

    @brief Returns the capacity of the buffer along the last dimension.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(in) :: this

    Return Value integer(kind=int64)

procedure, public :: push_back => add_val_int32_2D

  • private pure subroutine add_val_int32_2D(this, val)

    @brief Append a value to the buffer, expanding the capacity if necessary.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(inout) :: this
    integer(kind=int32), intent(in), dimension(:) :: val

    Value to be added

procedure, private :: dump => dump_int32_2D

  • private pure subroutine dump_int32_2D(this, tgt)

    @brief Dump the buffer to an allocatable array.

    Read more…

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(inout) :: this
    integer(kind=int32), intent(out), dimension(:, :), allocatable :: tgt

    Allocatable array (reset upon entry), contains the stored elements of

procedure, public :: dump_reset => dump_reset_int32_2D

  • private pure subroutine dump_reset_int32_2D(this, tgt)

    Dump the buffer to an allocatable array and reset the buffer.

    Read more…

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_int32_2D_t), intent(inout) :: this
    integer(kind=int32), intent(out), dimension(:, :), allocatable :: tgt

    Allocatable array (reset upon entry), contains the stored elements of

Source Code

    type :: buffer_int32_2D_t
        private

        integer(int32), dimension(:, :), allocatable, public :: 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_2D
        procedure :: finalize => finalize_int32_2D
        procedure, private :: reset => reset_int32_2D

        procedure :: size => get_size_int32_2D
        procedure :: capacity => get_capacity_int32_2D

        procedure :: push_back => add_val_int32_2D

        procedure, private :: dump => dump_int32_2D
        procedure :: dump_reset => dump_reset_int32_2D
    end type buffer_int32_2D_t