C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | List of all members
exprtk::function_compositor< T >::base_func Struct Reference
Inheritance diagram for exprtk::function_compositor< T >::base_func:
[legend]
Collaboration diagram for exprtk::function_compositor< T >::base_func:
[legend]

Public Types

typedef const T & type
 
typedef exprtk::ifunction< T > function_t
 
typedef std::vector< T * > varref_t
 
typedef std::vector< T > var_t
 
typedef std::vector< std::string > str_t
 
typedef std::pair< T *, std::size_t > lvarref_t
 
typedef std::vector< lvarref_tlvr_vec_t
 
typedef std::vector< std::string * > lstr_vec_t
 

Public Member Functions

 base_func (const std::size_t &pc=0)
 
virtual ~base_func ()
 
void update (const T &v0)
 
void update (const T &v0, const T &v1)
 
void update (const T &v0, const T &v1, const T &v2)
 
void update (const T &v0, const T &v1, const T &v2, const T &v3)
 
void update (const T &v0, const T &v1, const T &v2, const T &v3, const T &v4)
 
void update (const T &v0, const T &v1, const T &v2, const T &v3, const T &v4, const T &v5)
 
function_tsetup (expression_t &expr)
 
void pre ()
 
void post ()
 
void copy (const varref_t &src_v, var_t &dest_v)
 
void copy (const lstr_vec_t &src_v, str_t &dest_v)
 
void copy (const var_t &src_v, varref_t &dest_v)
 
void copy (const lvr_vec_t &src_v, var_t &dest_v)
 
void copy (const var_t &src_v, lvr_vec_t &dest_v)
 
void copy (const str_t &src_str, lstr_vec_t &dest_str)
 
void clear_stack ()
 
virtual T value (expression_t &e)
 
- Public Member Functions inherited from exprtk::ifunction< T >
 ifunction (const std::size_t &pc)
 
virtual ~ifunction ()
 
virtual T operator() ()
 
virtual T operator() (const T &)
 
virtual T operator() (const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
virtual T operator() (const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &, const T &)
 
- Public Member Functions inherited from exprtk::function_traits
 function_traits ()
 
bool & allow_zero_parameters ()
 
bool & has_side_effects ()
 
std::size_t & min_num_args ()
 
std::size_t & max_num_args ()
 

Public Attributes

expression_t expression
 
varref_t v
 
lvr_vec_t local_vars
 
lstr_vec_t local_str_vars
 
std::size_t local_var_stack_size
 
std::size_t stack_depth
 
std::deque< var_tinput_params_stack
 
std::deque< var_tlocal_var_stack
 
std::deque< str_tlocal_str_stack
 
- Public Attributes inherited from exprtk::ifunction< T >
std::size_t param_count
 

Detailed Description

template<typename T>
struct exprtk::function_compositor< T >::base_func

Definition at line 43072 of file exprtk.hpp.

Member Typedef Documentation

◆ function_t

template<typename T >
typedef exprtk::ifunction<T> exprtk::function_compositor< T >::base_func::function_t

Definition at line 43075 of file exprtk.hpp.

◆ lstr_vec_t

template<typename T >
typedef std::vector<std::string*> exprtk::function_compositor< T >::base_func::lstr_vec_t

Definition at line 43081 of file exprtk.hpp.

◆ lvarref_t

template<typename T >
typedef std::pair<T*,std::size_t> exprtk::function_compositor< T >::base_func::lvarref_t

Definition at line 43079 of file exprtk.hpp.

◆ lvr_vec_t

template<typename T >
typedef std::vector<lvarref_t> exprtk::function_compositor< T >::base_func::lvr_vec_t

Definition at line 43080 of file exprtk.hpp.

◆ str_t

template<typename T >
typedef std::vector<std::string> exprtk::function_compositor< T >::base_func::str_t

Definition at line 43078 of file exprtk.hpp.

◆ type

template<typename T >
typedef const T& exprtk::function_compositor< T >::base_func::type

Definition at line 43074 of file exprtk.hpp.

◆ var_t

template<typename T >
typedef std::vector<T> exprtk::function_compositor< T >::base_func::var_t

Definition at line 43077 of file exprtk.hpp.

◆ varref_t

template<typename T >
typedef std::vector<T*> exprtk::function_compositor< T >::base_func::varref_t

Definition at line 43076 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ base_func()

template<typename T >
exprtk::function_compositor< T >::base_func::base_func ( const std::size_t &  pc = 0)
inlineexplicit

◆ ~base_func()

template<typename T >
virtual exprtk::function_compositor< T >::base_func::~base_func ( )
inlinevirtual

Definition at line 43093 of file exprtk.hpp.

43094 {}

Member Function Documentation

◆ clear_stack()

template<typename T >
void exprtk::function_compositor< T >::base_func::clear_stack ( )
inline

Definition at line 43338 of file exprtk.hpp.

43339 {
43340 for (std::size_t i = 0; i < v.size(); ++i)
43341 {
43342 (*v[i]) = 0;
43343 }
43344 }

References exprtk::function_compositor< T >::base_func::v.

Referenced by exprtk::function_compositor< T >::base_func::setup().

Here is the caller graph for this function:

◆ copy() [1/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::copy ( const lstr_vec_t src_v,
str_t dest_v 
)
inline

Definition at line 43271 of file exprtk.hpp.

43272 {
43273 for (std::size_t i = 0; i < src_v.size(); ++i)
43274 {
43275 dest_v[i] = (*src_v[i]);
43276 }
43277 }

◆ copy() [2/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::copy ( const lvr_vec_t src_v,
var_t dest_v 
)
inline

Definition at line 43287 of file exprtk.hpp.

43288 {
43289 typename var_t::iterator itr = dest_v.begin();
43290 typedef typename std::iterator_traits<typename var_t::iterator>::difference_type diff_t;
43291
43292 for (std::size_t i = 0; i < src_v.size(); ++i)
43293 {
43294 lvarref_t vr = src_v[i];
43295
43296 if (1 == vr.second)
43297 *itr++ = (*vr.first);
43298 else
43299 {
43300 std::copy(vr.first, vr.first + vr.second, itr);
43301 itr += static_cast<diff_t>(vr.second);
43302 }
43303 }
43304 }
std::pair< T *, std::size_t > lvarref_t
Definition exprtk.hpp:43079

◆ copy() [3/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::copy ( const str_t src_str,
lstr_vec_t dest_str 
)
inline

Definition at line 43328 of file exprtk.hpp.

43329 {
43330 assert(src_str.size() == dest_str.size());
43331
43332 for (std::size_t i = 0; i < dest_str.size(); ++i)
43333 {
43334 *dest_str[i] = src_str[i];
43335 }
43336 }

◆ copy() [4/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::copy ( const var_t src_v,
lvr_vec_t dest_v 
)
inline

Definition at line 43306 of file exprtk.hpp.

43307 {
43308 typename var_t::const_iterator itr = src_v.begin();
43309 typedef typename std::iterator_traits<typename var_t::iterator>::difference_type diff_t;
43310
43311 for (std::size_t i = 0; i < dest_v.size(); ++i)
43312 {
43313 lvarref_t& vr = dest_v[i];
43314
43315 assert(vr.first != 0);
43316 assert(vr.second > 0);
43317
43318 if (1 == vr.second)
43319 (*vr.first) = *itr++;
43320 else
43321 {
43322 std::copy(itr, itr + static_cast<diff_t>(vr.second), vr.first);
43323 itr += static_cast<diff_t>(vr.second);
43324 }
43325 }
43326 }

◆ copy() [5/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::copy ( const var_t src_v,
varref_t dest_v 
)
inline

Definition at line 43279 of file exprtk.hpp.

43280 {
43281 for (std::size_t i = 0; i < src_v.size(); ++i)
43282 {
43283 (*dest_v[i]) = src_v[i];
43284 }
43285 }

◆ copy() [6/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::copy ( const varref_t src_v,
var_t dest_v 
)
inline

Definition at line 43263 of file exprtk.hpp.

43264 {
43265 for (std::size_t i = 0; i < src_v.size(); ++i)
43266 {
43267 dest_v[i] = (*src_v[i]);
43268 }
43269 }

Referenced by exprtk::function_compositor< T >::base_func::post(), and exprtk::function_compositor< T >::base_func::pre().

Here is the caller graph for this function:

◆ post()

template<typename T >
void exprtk::function_compositor< T >::base_func::post ( )
inline

Definition at line 43239 of file exprtk.hpp.

43240 {
43241 if (--stack_depth)
43242 {
43243 if (!v.empty())
43244 {
43245 copy(input_params_stack.back(), v);
43246 input_params_stack.pop_back();
43247 }
43248
43249 if (!local_vars.empty())
43250 {
43252 local_var_stack.pop_back();
43253 }
43254
43255 if (!local_str_vars.empty())
43256 {
43258 local_str_stack.pop_back();
43259 }
43260 }
43261 }
void copy(const varref_t &src_v, var_t &dest_v)
Definition exprtk.hpp:43263

References exprtk::function_compositor< T >::base_func::copy(), exprtk::function_compositor< T >::base_func::input_params_stack, exprtk::function_compositor< T >::base_func::local_str_stack, exprtk::function_compositor< T >::base_func::local_str_vars, exprtk::function_compositor< T >::base_func::local_var_stack, exprtk::function_compositor< T >::base_func::local_vars, exprtk::function_compositor< T >::base_func::stack_depth, and exprtk::function_compositor< T >::base_func::v.

Here is the call graph for this function:

◆ pre()

template<typename T >
void exprtk::function_compositor< T >::base_func::pre ( )
inline

Definition at line 43212 of file exprtk.hpp.

43213 {
43214 if (stack_depth++)
43215 {
43216 if (!v.empty())
43217 {
43218 var_t var_stack(v.size(),T(0));
43219 copy(v,var_stack);
43220 input_params_stack.push_back(var_stack);
43221 }
43222
43223 if (!local_vars.empty())
43224 {
43225 var_t local_vec_frame(local_var_stack_size,T(0));
43226 copy(local_vars,local_vec_frame);
43227 local_var_stack.push_back(local_vec_frame);
43228 }
43229
43230 if (!local_str_vars.empty())
43231 {
43232 str_t local_str_frame(local_str_vars.size());
43233 copy(local_str_vars,local_str_frame);
43234 local_str_stack.push_back(local_str_frame);
43235 }
43236 }
43237 }
std::vector< std::string > str_t
Definition exprtk.hpp:43078

References exprtk::function_compositor< T >::base_func::copy(), exprtk::function_compositor< T >::base_func::input_params_stack, exprtk::function_compositor< T >::base_func::local_str_stack, exprtk::function_compositor< T >::base_func::local_str_vars, exprtk::function_compositor< T >::base_func::local_var_stack, exprtk::function_compositor< T >::base_func::local_var_stack_size, exprtk::function_compositor< T >::base_func::local_vars, exprtk::function_compositor< T >::base_func::stack_depth, and exprtk::function_compositor< T >::base_func::v.

Here is the call graph for this function:

◆ setup()

template<typename T >
function_t & exprtk::function_compositor< T >::base_func::setup ( expression_t expr)
inline

Definition at line 43139 of file exprtk.hpp.

43140 {
43141 expression = expr;
43142
43143 typedef typename expression_t::control_block ctrlblk_t;
43144 typedef typename ctrlblk_t::local_data_list_t ldl_t;
43145 typedef typename ctrlblk_t::data_type data_t;
43146 typedef typename ldl_t::value_type ldl_value_type;
43147
43148 const ldl_t ldl = expr.local_data_list();
43149
43150 std::vector<std::pair<std::size_t,data_t> > index_list;
43151
43152 for (std::size_t i = 0; i < ldl.size(); ++i)
43153 {
43154 exprtk_debug(("base_func::setup() - element[%02d] type: %s size: %d\n",
43155 static_cast<int>(i),
43156 expression_t::control_block::to_str(ldl[i].type).c_str(),
43157 static_cast<int>(ldl[i].size)));
43158
43159 switch (ldl[i].type)
43160 {
43161 case ctrlblk_t::e_unknown : continue;
43162 case ctrlblk_t::e_expr : continue;
43163 case ctrlblk_t::e_vecholder : continue;
43164 default : break;
43165 }
43166
43167 if (ldl[i].size)
43168 {
43169 index_list.push_back(std::make_pair(i,ldl[i].type));
43170 }
43171 }
43172
43173 std::size_t input_param_count = 0;
43174
43175 for (std::size_t i = 0; i < index_list.size(); ++i)
43176 {
43177 const std::size_t index = index_list[i].first;
43178 const ldl_value_type& local_var = ldl[index];
43179
43180 assert(local_var.pointer);
43181
43182 if (i < (index_list.size() - v.size()))
43183 {
43184 if (local_var.type == ctrlblk_t::e_string)
43185 {
43186 local_str_vars.push_back(
43187 reinterpret_cast<std::string*>(local_var.pointer));
43188 }
43189 else if (
43190 (local_var.type == ctrlblk_t::e_data ) ||
43191 (local_var.type == ctrlblk_t::e_vecdata)
43192 )
43193 {
43194 local_vars.push_back(std::make_pair(
43195 reinterpret_cast<T*>(local_var.pointer),
43196 local_var.size));
43197
43198 local_var_stack_size += local_var.size;
43199 }
43200 }
43201 else
43202 {
43203 v[input_param_count++] = reinterpret_cast<T*>(local_var.pointer);
43204 }
43205 }
43206
43207 clear_stack();
43208
43209 return (*this);
43210 }
const control_block::local_data_list_t & local_data_list()
Definition exprtk.hpp:22114
#define exprtk_debug(params)
Definition exprtk.hpp:64

References exprtk::function_compositor< T >::base_func::clear_stack(), exprtk_debug, exprtk::expression< T >::local_data_list(), exprtk::function_compositor< T >::base_func::local_str_vars, exprtk::function_compositor< T >::base_func::local_var_stack_size, exprtk::function_compositor< T >::base_func::local_vars, and exprtk::function_compositor< T >::base_func::v.

Here is the call graph for this function:

◆ update() [1/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::update ( const T &  v0)
inline

Definition at line 43099 of file exprtk.hpp.

43100 {
43101 exprtk_assign(0)
43102 }
#define exprtk_assign(Index)
Definition exprtk.hpp:43096

References exprtk_assign.

Referenced by exprtk::function_compositor< T >::func_1param::operator()(), exprtk::function_compositor< T >::func_2param::operator()(), exprtk::function_compositor< T >::func_3param::operator()(), exprtk::function_compositor< T >::func_4param::operator()(), exprtk::function_compositor< T >::func_5param::operator()(), and exprtk::function_compositor< T >::func_6param::operator()().

Here is the caller graph for this function:

◆ update() [2/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::update ( const T &  v0,
const T &  v1 
)
inline

Definition at line 43104 of file exprtk.hpp.

43105 {
43107 }

References exprtk_assign.

◆ update() [3/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::update ( const T &  v0,
const T &  v1,
const T &  v2 
)
inline

Definition at line 43109 of file exprtk.hpp.

43110 {
43112 exprtk_assign(2)
43113 }

References exprtk_assign.

◆ update() [4/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::update ( const T &  v0,
const T &  v1,
const T &  v2,
const T &  v3 
)
inline

Definition at line 43115 of file exprtk.hpp.

43116 {
43119 }

References exprtk_assign.

◆ update() [5/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::update ( const T &  v0,
const T &  v1,
const T &  v2,
const T &  v3,
const T &  v4 
)
inline

Definition at line 43121 of file exprtk.hpp.

43122 {
43125 exprtk_assign(4)
43126 }

References exprtk_assign.

◆ update() [6/6]

template<typename T >
void exprtk::function_compositor< T >::base_func::update ( const T &  v0,
const T &  v1,
const T &  v2,
const T &  v3,
const T &  v4,
const T &  v5 
)
inline

Definition at line 43128 of file exprtk.hpp.

43129 {
43133 }

References exprtk_assign.

◆ value()

template<typename T >
virtual T exprtk::function_compositor< T >::base_func::value ( expression_t e)
inlinevirtual

Member Data Documentation

◆ expression

template<typename T >
expression_t exprtk::function_compositor< T >::base_func::expression

◆ input_params_stack

template<typename T >
std::deque<var_t> exprtk::function_compositor< T >::base_func::input_params_stack

◆ local_str_stack

template<typename T >
std::deque<str_t> exprtk::function_compositor< T >::base_func::local_str_stack

◆ local_str_vars

template<typename T >
lstr_vec_t exprtk::function_compositor< T >::base_func::local_str_vars

◆ local_var_stack

template<typename T >
std::deque<var_t> exprtk::function_compositor< T >::base_func::local_var_stack

◆ local_var_stack_size

template<typename T >
std::size_t exprtk::function_compositor< T >::base_func::local_var_stack_size

◆ local_vars

template<typename T >
lvr_vec_t exprtk::function_compositor< T >::base_func::local_vars

◆ stack_depth

template<typename T >
std::size_t exprtk::function_compositor< T >::base_func::stack_depth

◆ v

template<typename T >
varref_t exprtk::function_compositor< T >::base_func::v

The documentation for this struct was generated from the following file: