module CDownHoleActions
    use CIActionReference
    implicit none    
    public 
    
    abstract interface
        subroutine ActionFluid(array)
            use CDownHoleTypes
            type(CFluid), allocatable, intent(in), target :: array(:)
        end subroutine
        
        subroutine ActionComponent(array)
            use CDownHoleTypes
            type(CStringComponent), allocatable, intent(in), target :: array(:)
        end subroutine
        
        subroutine ActionBopElement(array)
            use CDownHoleTypes
            type(CBopElement), allocatable, intent(in), target :: array(:)
        end subroutine
    end interface
    
    procedure (ActionInteger), pointer :: AnnalusMudCountPtr
    procedure (ActionFluid), pointer :: AnnalusMudArrayPtr
    
    procedure (ActionInteger), pointer :: StringMudCountPtr
    procedure (ActionFluid), pointer :: StringMudArrayPtr
    
    procedure (ActionInteger), pointer :: StringComponentCountPtr
    procedure (ActionComponent), pointer :: StringComponentArrayPtr
    
    procedure (ActionBopElement), pointer :: BopElementsPtr
    
    contains 
    
    subroutine SubscribeAnnalusMudCount(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeAnnalusMudCount
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeAnnalusMudCount' :: SubscribeAnnalusMudCount
        implicit none
        procedure (ActionInteger) :: a
        AnnalusMudCountPtr => a
    end subroutine
    
    subroutine SubscribeAnnalusMudArray(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeAnnalusMudArray
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeAnnalusMudArray' :: SubscribeAnnalusMudArray
        implicit none
        procedure (ActionFluid) :: a
        AnnalusMudArrayPtr => a
    end subroutine
    
    
    
    
    
    
    
    
    subroutine SubscribeStringMudCount(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringMudCount
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringMudCount' :: SubscribeStringMudCount
        implicit none
        procedure (ActionInteger) :: a
        StringMudCountPtr => a
    end subroutine
    
    subroutine SubscribeStringMudArray(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringMudArray
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringMudArray' :: SubscribeStringMudArray
        implicit none
        procedure (ActionFluid) :: a
        StringMudArrayPtr => a
    end subroutine
    
    
    
    
    
    
    subroutine SubscribeStringComponentCount(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringComponentCount
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringComponentCount' :: SubscribeStringComponentCount
        implicit none
        procedure (ActionInteger) :: a
        StringComponentCountPtr => a
    end subroutine
    
    subroutine SubscribeStringComponentArray(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringComponentArray
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringComponentArray' :: SubscribeStringComponentArray
        implicit none
        procedure (ActionComponent) :: a
        StringComponentArrayPtr => a
    end subroutine
    
    
    subroutine SubscribeBopElements(a) 
    !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeBopElements
    !DEC$ ATTRIBUTES ALIAS: 'SubscribeBopElements' :: SubscribeBopElements
        implicit none
        procedure (ActionBopElement) :: a
        BopElementsPtr => a
    end subroutine
    
end module CDownHoleActions