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