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