module CIntegerArrayEventHandler use CIActionReference implicit none public type :: IntegerArrayEventHandler procedure(ActionIntegerArray), pointer, nopass :: Delegate => null() contains procedure :: AssignTo => AssignTo procedure :: MakeNull => MakeNull procedure :: IsNull => IsNull procedure :: Run => Run end type IntegerArrayEventHandler contains subroutine AssignTo(this, proc) implicit none class(IntegerArrayEventHandler), intent(inout) :: this procedure (ActionIntegerArray), pointer, intent(in) :: proc this%Delegate => proc end subroutine subroutine MakeNull(this) implicit none class(IntegerArrayEventHandler), intent(inout) :: this this%Delegate => null() end subroutine logical function IsNull(this) implicit none class(IntegerArrayEventHandler), intent(in) :: this IsNull = .not.associated(this%Delegate) end function subroutine Run(this, arg) implicit none class(IntegerArrayEventHandler), intent(inout) :: this integer, allocatable, intent (in) :: arg(:) !if(.not.this%IsNull()) call this%Delegate(arg) end subroutine end module CIntegerArrayEventHandler