/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (https://www.swig.org).
 * Version 4.1.1
 *
 * Do not make changes to this file unless you know what you are doing - modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */

#ifndef SWIG_NQuantLibc_WRAP_H_
#define SWIG_NQuantLibc_WRAP_H_

class SwigDirector_UnaryFunctionDelegate : public UnaryFunctionDelegate, public Swig::Director {

public:
    SwigDirector_UnaryFunctionDelegate();
    virtual ~SwigDirector_UnaryFunctionDelegate();
    virtual Real value(Real x) const;

    typedef double (SWIGSTDCALL* SWIG_Callback0_t)(double);
    void swig_connect_director(SWIG_Callback0_t callbackvalue);

private:
    SWIG_Callback0_t swig_callbackvalue;
    void swig_init_callbacks();
};

class SwigDirector_BinaryFunctionDelegate : public BinaryFunctionDelegate, public Swig::Director {

public:
    SwigDirector_BinaryFunctionDelegate();
    virtual ~SwigDirector_BinaryFunctionDelegate();
    virtual Real value(Real arg0,Real arg1) const;

    typedef double (SWIGSTDCALL* SWIG_Callback0_t)(double, double);
    void swig_connect_director(SWIG_Callback0_t callbackvalue);

private:
    SWIG_Callback0_t swig_callbackvalue;
    void swig_init_callbacks();
};

class SwigDirector_CostFunctionDelegate : public CostFunctionDelegate, public Swig::Director {

public:
    SwigDirector_CostFunctionDelegate();
    virtual ~SwigDirector_CostFunctionDelegate();
    virtual Real value(Array const &x) const;
    virtual Array values(Array const &x) const;

    typedef double (SWIGSTDCALL* SWIG_Callback0_t)(void *);
    typedef void * (SWIGSTDCALL* SWIG_Callback1_t)(void *);
    void swig_connect_director(SWIG_Callback0_t callbackvalue, SWIG_Callback1_t callbackvalues);

private:
    SWIG_Callback0_t swig_callbackvalue;
    SWIG_Callback1_t swig_callbackvalues;
    void swig_init_callbacks();
};

class SwigDirector_FdmLinearOpCompositeDelegate : public FdmLinearOpCompositeDelegate, public Swig::Director {

public:
    SwigDirector_FdmLinearOpCompositeDelegate();
    virtual ~SwigDirector_FdmLinearOpCompositeDelegate();
    virtual Size size() const;
    virtual void setTime(Time t1,Time t2);
    virtual Array apply(Array const &r) const;
    virtual Array apply_mixed(Array const &r) const;
    virtual Array apply_direction(Size direction,Array const &r) const;
    virtual Array solve_splitting(Size direction,Array const &r,Real s) const;
    virtual Array preconditioner(Array const &r,Real dt) const;

    typedef unsigned long (SWIGSTDCALL* SWIG_Callback0_t)();
    typedef void (SWIGSTDCALL* SWIG_Callback1_t)(double, double);
    typedef void * (SWIGSTDCALL* SWIG_Callback2_t)(void *);
    typedef void * (SWIGSTDCALL* SWIG_Callback3_t)(void *);
    typedef void * (SWIGSTDCALL* SWIG_Callback4_t)(unsigned long, void *);
    typedef void * (SWIGSTDCALL* SWIG_Callback5_t)(unsigned long, void *, double);
    typedef void * (SWIGSTDCALL* SWIG_Callback6_t)(void *, double);
    void swig_connect_director(SWIG_Callback0_t callbacksize, SWIG_Callback1_t callbacksetTime, SWIG_Callback2_t callbackapply, SWIG_Callback3_t callbackapply_mixed, SWIG_Callback4_t callbackapply_direction, SWIG_Callback5_t callbacksolve_splitting, SWIG_Callback6_t callbackpreconditioner);

private:
    SWIG_Callback0_t swig_callbacksize;
    SWIG_Callback1_t swig_callbacksetTime;
    SWIG_Callback2_t swig_callbackapply;
    SWIG_Callback3_t swig_callbackapply_mixed;
    SWIG_Callback4_t swig_callbackapply_direction;
    SWIG_Callback5_t swig_callbacksolve_splitting;
    SWIG_Callback6_t swig_callbackpreconditioner;
    void swig_init_callbacks();
};

class SwigDirector_FdmStepConditionDelegate : public FdmStepConditionDelegate, public Swig::Director {

public:
    SwigDirector_FdmStepConditionDelegate();
    virtual ~SwigDirector_FdmStepConditionDelegate();
    virtual void applyTo(Array &a,Time t) const;

    typedef void (SWIGSTDCALL* SWIG_Callback0_t)(void *, double);
    void swig_connect_director(SWIG_Callback0_t callbackapplyTo);

private:
    SWIG_Callback0_t swig_callbackapplyTo;
    void swig_init_callbacks();
};

class SwigDirector_FdmInnerValueCalculatorDelegate : public FdmInnerValueCalculatorDelegate, public Swig::Director {

public:
    SwigDirector_FdmInnerValueCalculatorDelegate();
    virtual ~SwigDirector_FdmInnerValueCalculatorDelegate();
    virtual Real innerValue(FdmLinearOpIterator const &iter,Time t);
    virtual Real avgInnerValue(FdmLinearOpIterator const &iter,Time t);

    typedef double (SWIGSTDCALL* SWIG_Callback0_t)(void *, double);
    typedef double (SWIGSTDCALL* SWIG_Callback1_t)(void *, double);
    void swig_connect_director(SWIG_Callback0_t callbackinnerValue, SWIG_Callback1_t callbackavgInnerValue);

private:
    SWIG_Callback0_t swig_callbackinnerValue;
    SWIG_Callback1_t swig_callbackavgInnerValue;
    void swig_init_callbacks();
};

class SwigDirector_OdeFctDelegate : public OdeFctDelegate, public Swig::Director {

public:
    SwigDirector_OdeFctDelegate();
    virtual ~SwigDirector_OdeFctDelegate();
    virtual std::vector< Real > value(Real x,std::vector< Real > const &y) const;

    typedef void * (SWIGSTDCALL* SWIG_Callback0_t)(double, void *);
    void swig_connect_director(SWIG_Callback0_t callbackvalue);

private:
    SWIG_Callback0_t swig_callbackvalue;
    void swig_init_callbacks();
};


#endif
