The main documentation of the Valid_State_Trace Procedure contains additional explanation of this code listing.
function Valid_State_Trace (Trace) result(Valid)
! Input variables.
! Variable to be checked.
type(Trace_type), intent(in) :: Trace
! Output variables.
type(logical) :: Valid ! Logical state.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Start out true.
Valid = .true.
! Check for association of pointered internals.
Valid = Valid .and. ASSOCIATED(Trace%Initialized)
ifdef([USE_PGSLIB],[
Valid = Valid .and. ASSOCIATED(Trace%Trace)
])
if (.not.Valid) return
! Check for validity of internals.
select case (Trace%Dimensionality)
case (1)
Valid = Valid .and. Valid_State(Trace%Index1)
Valid = Valid .and. Valid_State(Trace%Mask1)
case (2)
Valid = Valid .and. Valid_State(Trace%Index2)
Valid = Valid .and. Valid_State(Trace%Mask2)
end select
if (.not.Valid) return
! Checks on the validity of Index.
! <none so far>
return
end function Valid_State_Trace