List of all members | Public Member Functions
casadi::FunctionBuffer Class Reference

Class to achieve minimal overhead function evaluations. More...

#include <function.hpp>

Detailed Description

Extra doc: https://github.com/casadi/casadi/wiki/L_1y9

Definition at line 1313 of file function.hpp.

Public Member Functions

 FunctionBuffer (const Function &f)
 Main constructor. More...
 
 ~FunctionBuffer ()
 
 FunctionBuffer (const FunctionBuffer &f)
 
FunctionBufferoperator= (const FunctionBuffer &f)
 
void set_arg (casadi_int i, const double *a, casadi_int size)
 Set input buffer for input i. More...
 
void set_res (casadi_int i, double *a, casadi_int size)
 Set output buffer for ouput i. More...
 
int ret ()
 Get last return value. More...
 
void _eval ()
 
void * _self ()
 
Dict stats () const
 

Constructor & Destructor Documentation

◆ FunctionBuffer() [1/2]

casadi::FunctionBuffer::FunctionBuffer ( const Function f)

Extra doc: https://github.com/casadi/casadi/wiki/L_1ya

Definition at line 1946 of file function.cpp.

1946  : f_(f) {
1947  w_.resize(f_.sz_w());
1948  iw_.resize(f_.sz_iw());
1949  arg_.resize(f_.sz_arg());
1950  res_.resize(f_.sz_res());
1951  mem_ = f_->checkout();
1952  mem_internal_ = f.memory(mem_);
1953  f_node_ = f.operator->();
1954  }
size_t sz_res() const
Get required length of res field.
Definition: function.cpp:1085
size_t sz_iw() const
Get required length of iw field.
Definition: function.cpp:1087
size_t sz_w() const
Get required length of w field.
Definition: function.cpp:1089
size_t sz_arg() const
Get required length of arg field.
Definition: function.cpp:1083
int checkout() const
Checkout a memory object.

References casadi::ProtoFunction::checkout(), casadi::Function::memory(), casadi::Function::sz_arg(), casadi::Function::sz_iw(), casadi::Function::sz_res(), and casadi::Function::sz_w().

◆ ~FunctionBuffer()

casadi::FunctionBuffer::~FunctionBuffer ( )

Definition at line 1956 of file function.cpp.

1956  {
1957  if (f_->release_) {
1958  f_->release_(mem_);
1959  } else {
1960  f_.release(mem_);
1961  }
1962  }
casadi_release_t release_
Release redirected to a C function.
void release(int mem) const
Release a memory object.
Definition: function.cpp:1777

References casadi::Function::release(), and casadi::FunctionInternal::release_.

◆ FunctionBuffer() [2/2]

casadi::FunctionBuffer::FunctionBuffer ( const FunctionBuffer f)

Definition at line 1964 of file function.cpp.

1964  : f_(f.f_) {
1965  operator=(f);
1966  }
FunctionBuffer & operator=(const FunctionBuffer &f)
Definition: function.cpp:1968

References operator=().

Member Function Documentation

◆ _eval()

void casadi::FunctionBuffer::_eval ( )

Definition at line 1994 of file function.cpp.

1994  {
1995  if (f_node_->eval_) {
1996  ret_ = f_node_->eval_(get_ptr(arg_), get_ptr(res_), get_ptr(iw_), get_ptr(w_), mem_);
1997  } else {
1998  ret_ = f_node_->eval(get_ptr(arg_), get_ptr(res_), get_ptr(iw_), get_ptr(w_), mem_internal_);
1999  }
2000  }
virtual int eval(const double **arg, double **res, casadi_int *iw, double *w, void *mem) const
Evaluate numerically.
eval_t eval_
Numerical evaluation redirected to a C function.
T * get_ptr(std::vector< T > &v)
Get a pointer to the data contained in the vector.

References casadi::FunctionInternal::eval(), casadi::FunctionInternal::eval_, and casadi::get_ptr().

◆ _self()

void* casadi::FunctionBuffer::_self ( )
inline

Definition at line 1354 of file function.hpp.

1354 { return this; }

◆ operator=()

FunctionBuffer & casadi::FunctionBuffer::operator= ( const FunctionBuffer f)

Definition at line 1968 of file function.cpp.

1968  {
1969  f_ = f.f_;
1970  w_ = f.w_; iw_ = f.iw_; arg_ = f.arg_; res_ = f.res_; f_node_ = f.f_node_;
1971  // Checkout fresh memory
1972  if (f_->checkout_) {
1973  mem_ = f_->checkout_();
1974  } else {
1975  mem_ = f_.checkout();
1976  mem_internal_ = f_.memory(mem_);
1977  }
1978 
1979  return *this;
1980  }
casadi_checkout_t checkout_
Checkout redirected to a C function.
casadi_int checkout() const
Checkout a memory object.
Definition: function.cpp:1773
void * memory(int ind) const
Get memory object.
Definition: function.cpp:1781

References casadi::Function::checkout(), casadi::FunctionInternal::checkout_, and casadi::Function::memory().

Referenced by FunctionBuffer().

◆ ret()

int casadi::FunctionBuffer::ret ( )

Definition at line 2001 of file function.cpp.

2001  {
2002  return ret_;
2003  }

◆ set_arg()

void casadi::FunctionBuffer::set_arg ( casadi_int  i,
const double *  a,
casadi_int  size 
)

mem.set_arg(0, memoryview(a))

Note that CasADi uses 'fortran' order: column-by-column

Extra doc: https://github.com/casadi/casadi/wiki/L_1yb

Definition at line 1982 of file function.cpp.

1982  {
1983  casadi_assert(size>=f_.nnz_in(i)*sizeof(double),
1984  "Buffer is not large enough. Needed " + str(f_.nnz_in(i)*sizeof(double)) +
1985  " bytes, got " + str(size) + ".");
1986  arg_.at(i) = a;
1987  }
casadi_int nnz_in() const
Get number of input nonzeros.
Definition: function.cpp:851
std::string str(const T &v)
String representation, any type.

References casadi::Function::nnz_in(), and casadi::str().

◆ set_res()

void casadi::FunctionBuffer::set_res ( casadi_int  i,
double *  a,
casadi_int  size 
)

mem.set_res(0, memoryview(a))

Note that CasADi uses 'fortran' order: column-by-column

Extra doc: https://github.com/casadi/casadi/wiki/L_1yc

Definition at line 1988 of file function.cpp.

1988  {
1989  casadi_assert(size>=f_.nnz_out(i)*sizeof(double),
1990  "Buffer is not large enough. Needed " + str(f_.nnz_out(i)*sizeof(double)) +
1991  " bytes, got " + str(size) + ".");
1992  res_.at(i) = a;
1993  }
casadi_int nnz_out() const
Get number of output nonzeros.
Definition: function.cpp:855

References casadi::Function::nnz_out(), and casadi::str().

◆ stats()

Dict casadi::FunctionBuffer::stats ( ) const

Definition at line 2009 of file function.cpp.

2009  {
2010  return f_.stats(mem_);
2011  }
Dict stats(int mem=0) const
Get all statistics obtained at the end of the last evaluate call.
Definition: function.cpp:928

References casadi::Function::stats().


The documentation for this class was generated from the following files: