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 42579 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 42582 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 42588 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 42586 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 42587 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 42585 of file exprtk.hpp.

◆ type

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

Definition at line 42581 of file exprtk.hpp.

◆ var_t

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

Definition at line 42584 of file exprtk.hpp.

◆ varref_t

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

Definition at line 42583 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)
inline

◆ ~base_func()

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

Definition at line 42600 of file exprtk.hpp.

42601 {}

Member Function Documentation

◆ clear_stack()

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

Definition at line 42845 of file exprtk.hpp.

42846 {
42847 for (std::size_t i = 0; i < v.size(); ++i)
42848 {
42849 (*v[i]) = 0;
42850 }
42851 }

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 42778 of file exprtk.hpp.

42779 {
42780 for (std::size_t i = 0; i < src_v.size(); ++i)
42781 {
42782 dest_v[i] = (*src_v[i]);
42783 }
42784 }

◆ 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 42794 of file exprtk.hpp.

42795 {
42796 typename var_t::iterator itr = dest_v.begin();
42797 typedef typename std::iterator_traits<typename var_t::iterator>::difference_type diff_t;
42798
42799 for (std::size_t i = 0; i < src_v.size(); ++i)
42800 {
42801 lvarref_t vr = src_v[i];
42802
42803 if (1 == vr.second)
42804 *itr++ = (*vr.first);
42805 else
42806 {
42807 std::copy(vr.first, vr.first + vr.second, itr);
42808 itr += static_cast<diff_t>(vr.second);
42809 }
42810 }
42811 }
std::pair< T *, std::size_t > lvarref_t
Definition exprtk.hpp:42586

◆ 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 42835 of file exprtk.hpp.

42836 {
42837 assert(src_str.size() == dest_str.size());
42838
42839 for (std::size_t i = 0; i < dest_str.size(); ++i)
42840 {
42841 *dest_str[i] = src_str[i];
42842 }
42843 }

◆ 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 42813 of file exprtk.hpp.

42814 {
42815 typename var_t::const_iterator itr = src_v.begin();
42816 typedef typename std::iterator_traits<typename var_t::iterator>::difference_type diff_t;
42817
42818 for (std::size_t i = 0; i < dest_v.size(); ++i)
42819 {
42820 lvarref_t& vr = dest_v[i];
42821
42822 assert(vr.first != 0);
42823 assert(vr.second > 0);
42824
42825 if (1 == vr.second)
42826 (*vr.first) = *itr++;
42827 else
42828 {
42829 std::copy(itr, itr + static_cast<diff_t>(vr.second), vr.first);
42830 itr += static_cast<diff_t>(vr.second);
42831 }
42832 }
42833 }

◆ 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 42786 of file exprtk.hpp.

42787 {
42788 for (std::size_t i = 0; i < src_v.size(); ++i)
42789 {
42790 (*dest_v[i]) = src_v[i];
42791 }
42792 }

◆ 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 42770 of file exprtk.hpp.

42771 {
42772 for (std::size_t i = 0; i < src_v.size(); ++i)
42773 {
42774 dest_v[i] = (*src_v[i]);
42775 }
42776 }

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 42746 of file exprtk.hpp.

42747 {
42748 if (--stack_depth)
42749 {
42750 if (!v.empty())
42751 {
42752 copy(input_params_stack.back(), v);
42753 input_params_stack.pop_back();
42754 }
42755
42756 if (!local_vars.empty())
42757 {
42759 local_var_stack.pop_back();
42760 }
42761
42762 if (!local_str_vars.empty())
42763 {
42765 local_str_stack.pop_back();
42766 }
42767 }
42768 }
void copy(const varref_t &src_v, var_t &dest_v)
Definition exprtk.hpp:42770

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 42719 of file exprtk.hpp.

42720 {
42721 if (stack_depth++)
42722 {
42723 if (!v.empty())
42724 {
42725 var_t var_stack(v.size(),T(0));
42726 copy(v,var_stack);
42727 input_params_stack.push_back(var_stack);
42728 }
42729
42730 if (!local_vars.empty())
42731 {
42732 var_t local_vec_frame(local_var_stack_size,T(0));
42733 copy(local_vars,local_vec_frame);
42734 local_var_stack.push_back(local_vec_frame);
42735 }
42736
42737 if (!local_str_vars.empty())
42738 {
42739 str_t local_str_frame(local_str_vars.size());
42740 copy(local_str_vars,local_str_frame);
42741 local_str_stack.push_back(local_str_frame);
42742 }
42743 }
42744 }
std::vector< std::string > str_t
Definition exprtk.hpp:42585

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 42646 of file exprtk.hpp.

42647 {
42648 expression = expr;
42649
42650 typedef typename expression_t::control_block ctrlblk_t;
42651 typedef typename ctrlblk_t::local_data_list_t ldl_t;
42652 typedef typename ctrlblk_t::data_type data_t;
42653 typedef typename ldl_t::value_type ldl_value_type;
42654
42655 const ldl_t ldl = expr.local_data_list();
42656
42657 std::vector<std::pair<std::size_t,data_t> > index_list;
42658
42659 for (std::size_t i = 0; i < ldl.size(); ++i)
42660 {
42661 exprtk_debug(("base_func::setup() - element[%02d] type: %s size: %d\n",
42662 static_cast<int>(i),
42663 expression_t::control_block::to_str(ldl[i].type).c_str(),
42664 static_cast<int>(ldl[i].size)));
42665
42666 switch (ldl[i].type)
42667 {
42668 case ctrlblk_t::e_unknown : continue;
42669 case ctrlblk_t::e_expr : continue;
42670 case ctrlblk_t::e_vecholder : continue;
42671 default : break;
42672 }
42673
42674 if (ldl[i].size)
42675 {
42676 index_list.push_back(std::make_pair(i,ldl[i].type));
42677 }
42678 }
42679
42680 std::size_t input_param_count = 0;
42681
42682 for (std::size_t i = 0; i < index_list.size(); ++i)
42683 {
42684 const std::size_t index = index_list[i].first;
42685 const ldl_value_type& local_var = ldl[index];
42686
42687 assert(local_var.pointer);
42688
42689 if (i < (index_list.size() - v.size()))
42690 {
42691 if (local_var.type == ctrlblk_t::e_string)
42692 {
42693 local_str_vars.push_back(
42694 reinterpret_cast<std::string*>(local_var.pointer));
42695 }
42696 else if (
42697 (local_var.type == ctrlblk_t::e_data ) ||
42698 (local_var.type == ctrlblk_t::e_vecdata)
42699 )
42700 {
42701 local_vars.push_back(std::make_pair(
42702 reinterpret_cast<T*>(local_var.pointer),
42703 local_var.size));
42704
42705 local_var_stack_size += local_var.size;
42706 }
42707 }
42708 else
42709 {
42710 v[input_param_count++] = reinterpret_cast<T*>(local_var.pointer);
42711 }
42712 }
42713
42714 clear_stack();
42715
42716 return (*this);
42717 }
const control_block::local_data_list_t & local_data_list()
Definition exprtk.hpp:21849
#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 42606 of file exprtk.hpp.

42607 {
42608 exprtk_assign(0)
42609 }
#define exprtk_assign(Index)
Definition exprtk.hpp:42603

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 42611 of file exprtk.hpp.

42612 {
42614 }

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 42616 of file exprtk.hpp.

42617 {
42619 exprtk_assign(2)
42620 }

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 42622 of file exprtk.hpp.

42623 {
42626 }

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 42628 of file exprtk.hpp.

42629 {
42632 exprtk_assign(4)
42633 }

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 42635 of file exprtk.hpp.

42636 {
42640 }

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: