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 1318 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 1954 of file function.cpp.

1954  : f_(f) {
1955  w_.resize(f_.sz_w());
1956  iw_.resize(f_.sz_iw());
1957  arg_.resize(f_.sz_arg());
1958  res_.resize(f_.sz_res());
1959  mem_ = f_->checkout();
1960  mem_internal_ = f.memory(mem_);
1961  f_node_ = f.operator->();
1962  }
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 1964 of file function.cpp.

1964  {
1965  if (f_->release_) {
1966  f_->release_(mem_);
1967  } else {
1968  f_.release(mem_);
1969  }
1970  }
casadi_release_t release_
Release redirected to a C function.
void release(int mem) const
Release a memory object.
Definition: function.cpp:1785

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

◆ FunctionBuffer() [2/2]

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

Definition at line 1972 of file function.cpp.

1972  : f_(f.f_) {
1973  operator=(f);
1974  }
FunctionBuffer & operator=(const FunctionBuffer &f)
Definition: function.cpp:1976

References operator=().

Member Function Documentation

◆ _eval()

void casadi::FunctionBuffer::_eval ( )

Definition at line 2002 of file function.cpp.

2002  {
2003  if (f_node_->eval_) {
2004  ret_ = f_node_->eval_(get_ptr(arg_), get_ptr(res_), get_ptr(iw_), get_ptr(w_), mem_);
2005  } else {
2006  ret_ = f_node_->eval(get_ptr(arg_), get_ptr(res_), get_ptr(iw_), get_ptr(w_), mem_internal_);
2007  }
2008  }
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 1359 of file function.hpp.

1359 { return this; }

◆ operator=()

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

Definition at line 1976 of file function.cpp.

1976  {
1977  f_ = f.f_;
1978  w_ = f.w_; iw_ = f.iw_; arg_ = f.arg_; res_ = f.res_; f_node_ = f.f_node_;
1979  // Checkout fresh memory
1980  if (f_->checkout_) {
1981  mem_ = f_->checkout_();
1982  } else {
1983  mem_ = f_.checkout();
1984  mem_internal_ = f_.memory(mem_);
1985  }
1986 
1987  return *this;
1988  }
casadi_checkout_t checkout_
Checkout redirected to a C function.
casadi_int checkout() const
Checkout a memory object.
Definition: function.cpp:1781
void * memory(int ind) const
Get memory object.
Definition: function.cpp:1789

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

Referenced by FunctionBuffer().

◆ ret()

int casadi::FunctionBuffer::ret ( )

Definition at line 2009 of file function.cpp.

2009  {
2010  return ret_;
2011  }

◆ 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 1990 of file function.cpp.

1990  {
1991  casadi_assert(size>=f_.nnz_in(i)*sizeof(double),
1992  "Buffer is not large enough. Needed " + str(f_.nnz_in(i)*sizeof(double)) +
1993  " bytes, got " + str(size) + ".");
1994  arg_.at(i) = a;
1995  }
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 1996 of file function.cpp.

1996  {
1997  casadi_assert(size>=f_.nnz_out(i)*sizeof(double),
1998  "Buffer is not large enough. Needed " + str(f_.nnz_out(i)*sizeof(double)) +
1999  " bytes, got " + str(size) + ".");
2000  res_.at(i) = a;
2001  }
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 2017 of file function.cpp.

2017  {
2018  return f_.stats(mem_);
2019  }
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: