state_type Derived Type

type, public :: state_type

state_type defines a general state return type for a stdlib routine. State contains a status flag, a comment, and a procedure specifier that can be used to mark where the error happened


Components

Type Visibility Attributes Name Initial
character(len=MSG_LENGTH), public :: message = repeat(' ', MSG_LENGTH)

Message associated to the current state

integer(kind=ilp), public :: state = STDLIB_SUCCESS

The current exit state

character(len=NAME_LENGTH), public :: where_at = repeat(' ', NAME_LENGTH)

Location of the state change


Constructor

public interface state_type

  • private pure function new_state(where_at, flag, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)

    Error creation message, with location location

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: where_at

    Location

    integer, intent(in) :: flag

    Input error flag

    class(*), intent(in), optional, dimension(..) :: a1

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a2

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a3

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a4

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a5

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a6

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a7

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a8

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a9

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a10

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a11

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a12

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a13

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a14

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a15

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a16

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a17

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a18

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a19

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a20

    Optional rank-agnostic arguments

    Return Value type(state_type)

  • private pure function new_state_nowhere(flag, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) result(new_state)

    Error creation message, from N input variables (numeric or strings)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: flag

    Input error flag

    class(*), intent(in), optional, dimension(..) :: a1

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a2

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a3

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a4

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a5

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a6

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a7

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a8

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a9

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a10

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a11

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a12

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a13

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a14

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a15

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a16

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a17

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a18

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a19

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a20

    Optional rank-agnostic arguments

    Return Value type(state_type)


Type-Bound Procedures

procedure, public :: destroy => state_destroy

Cleanup

  • private elemental subroutine state_destroy(this)

    Cleanup the object

    Arguments

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

procedure, public :: error => state_is_error

  • private elemental function state_is_error(this)

    Check if the current state is an error state

    Arguments

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

    Return Value logical(kind=lk)

procedure, public :: handle => error_handling

Handle optional error message

  • private pure subroutine error_handling(ierr, ierr_out)

    Flow control: on output flag present, return it; otherwise, halt on error

    Arguments

    Type IntentOptional Attributes Name
    class(state_type), intent(in) :: ierr
    class(state_type), intent(inout), optional :: ierr_out

procedure, public :: ok => state_is_ok

State properties

  • private elemental function state_is_ok(this)

    Check if the current state is successful

    Arguments

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

    Return Value logical(kind=lk)

generic, public :: parse => state_parse_at_location, state_parse_arguments

  • private pure subroutine state_parse_at_location(new_state, where_at, flag, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)

    Parse a generic list of arguments provided to the error constructor

    Set error flag

    Set chain Add location

    Arguments

    Type IntentOptional Attributes Name
    class(state_type), intent(inout) :: new_state

    The current state variable

    character(len=*), intent(in) :: where_at

    Error Location

    integer, intent(in) :: flag

    Input error flag

    class(*), intent(in), optional, dimension(..) :: a1

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a2

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a3

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a4

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a5

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a6

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a7

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a8

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a9

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a10

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a11

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a12

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a13

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a14

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a15

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a16

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a17

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a18

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a19

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a20

    Optional rank-agnostic arguments

  • private pure subroutine state_parse_arguments(new_state, flag, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)

    Parse a generic list of arguments provided to the error constructor

    Set error flag

    Set chain

    Arguments

    Type IntentOptional Attributes Name
    class(state_type), intent(inout) :: new_state

    The current state variable

    integer, intent(in) :: flag

    Input error flag

    class(*), intent(in), optional, dimension(..) :: a1

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a2

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a3

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a4

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a5

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a6

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a7

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a8

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a9

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a10

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a11

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a12

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a13

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a14

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a15

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a16

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a17

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a18

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a19

    Optional rank-agnostic arguments

    class(*), intent(in), optional, dimension(..) :: a20

    Optional rank-agnostic arguments

procedure, public :: print => state_print

Print error message

  • private pure function state_print(this) result(msg)

    Produce a nice error string

    Arguments

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

    Return Value character(len=:), allocatable

procedure, public :: print_msg => state_message

  • private pure function state_message(this) result(msg)

    Return a formatted message

    Arguments

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

    Return Value character(len=:), allocatable

Source Code

    type :: state_type

        !> The current exit state
        integer(ilp) :: state = STDLIB_SUCCESS

        !> Message associated to the current state
        character(len=MSG_LENGTH) :: message = repeat(' ',MSG_LENGTH)

        !> Location of the state change
        character(len=NAME_LENGTH) :: where_at = repeat(' ',NAME_LENGTH)

        contains

           !> Cleanup
           procedure :: destroy   => state_destroy
           
           !> Parse error constructor
           procedure, private :: state_parse_at_location
           procedure, private :: state_parse_arguments
           generic   :: parse     => state_parse_at_location, &
                                     state_parse_arguments

           !> Print error message
           procedure :: print     => state_print
           procedure :: print_msg => state_message

           !> State properties
           procedure :: ok        => state_is_ok
           procedure :: error     => state_is_error
           
           !> Handle optional error message 
           procedure :: handle    => error_handling

    end type state_type