code_gen_fun.hpp

View page source

code_gen_fun Class Include File

See Also

code_gen_fun , code_gen_fun.cpp

Source

# include <cppad/cg/cppadcg.hpp>

// See https://docs.microsoft.com/en-us/cpp/cpp/
//      using-dllimport-and-dllexport-in-cpp-classes?view=msvc-160
// Also see define.hpp where CPPAD_LIB_EXPORTS is also defined and
// undef.hpp where it gets undefined.
# ifdef  _MSC_VER
# ifdef  cppad_lib_EXPORTS
# define CPPAD_LIB_EXPORT __declspec(dllexport)
# else
# define CPPAD_LIB_EXPORT __declspec(dllimport)
# endif  // cppad_lib_EXPORTS
# else   // _MSC_VER
# define CPPAD_LIB_EXPORT
# endif

class CPPAD_LIB_EXPORT code_gen_fun {
public:
   // type of evaluation for Jacobians (possibly Hessians in the future)
   enum evaluation_enum { none_enum, dense_enum, sparse_enum };
private:
   // dynamic_lib_
   std::unique_ptr< CppAD::cg::DynamicLib<double> > dynamic_lib_;
   //
   // model_ (contains a reference to dynamic_lib_)
   std::unique_ptr< CppAD::cg::GenericModel<double> > model_;
   //
public:
   // -----------------------------------------------------------------------
   // constructors
   // -----------------------------------------------------------------------
   // fun_name()
   code_gen_fun(void);
   //
   // fun_name( file_name )
   code_gen_fun(const std::string& file_name);
   //
   // fun_name(file_name, cg_fun, eval_jac)
   code_gen_fun(
      const std::string&                     file_name             ,
      CppAD::ADFun< CppAD::cg::CG<double> >& cg_fun                ,
      evaluation_enum                        eval_jac = none_enum
   );
   // -----------------------------------------------------------------------
   // operations
   // -----------------------------------------------------------------------
   // swap(other_fun)
   void swap(code_gen_fun& other_fun);
   //
   // y = fun_name(x)
   CppAD::vector<double>  operator()(const CppAD::vector<double> & x);
   //
   // J = fun_name.jacobian(x)
   CppAD::vector<double>  jacobian(const CppAD::vector<double> & x);
   //
   // Jrcv = fun_name.sparse_jacobian(x)
   CppAD::sparse_rcv< CppAD::vector<size_t>, CppAD::vector<double> >
   sparse_jacobian(const CppAD::vector<double>& x);
};