module CIActionReference
    implicit none
    abstract interface
        subroutine ActionVoid()
        end subroutine
    
        subroutine ActionBool(i)
            logical, intent (in) :: i
        end subroutine
        
        subroutine ActionInteger(i)
            integer, intent (in) :: i
        end subroutine
        
        subroutine ActionIntegerArray(arr)
            integer, allocatable, intent (in) :: arr(:)
        end subroutine
        
        subroutine ActionReal(i)
            real, intent (in) :: i
        end subroutine
        
        subroutine ActionDouble(i)
            real(8), intent (in) :: i
        end subroutine
        
        subroutine ActionDualDouble(a, b)
            real(8), intent (in) :: a, b
        end subroutine
        
        subroutine ActionString(c)
            character(len=*), intent(in) :: c
        end subroutine
        
        subroutine ActionStringInt(c, i)
            character(len=*), intent(in) :: c
            integer, intent (in) :: i
        end subroutine
        
        subroutine ActionStringFloat(c, f)
            character(len=*), intent(in) :: c
            real, intent (in) :: f
        end subroutine
        
        subroutine ActionStringDouble(c, d)
            character(len=*), intent(in) :: c
            real(8), intent (in) :: d
        end subroutine
        
        subroutine ActionStringBool(c, b)
            character(len=*), intent(in) :: c
            logical, intent (in) :: b
        end subroutine
    end interface
end module CIActionReference