C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
exprtk::parser< T >::scope_element_manager Class Reference
Collaboration diagram for exprtk::parser< T >::scope_element_manager:
[legend]

Public Types

typedef expression_node_t * expression_node_ptr
typedef variable_node_t * variable_node_ptr
typedef parser< T > parser_t

Public Member Functions

 scope_element_manager (parser< T > &p)
std::size_t size () const
bool empty () const
scope_element & get_element (const std::size_t &index)
scope_element & get_element (const std::string &var_name, const std::size_t index=std::numeric_limits< std::size_t >::max())
scope_element & get_active_element (const std::string &var_name, const std::size_t index=std::numeric_limits< std::size_t >::max())
bool add_element (const scope_element &se)
void deactivate (const std::size_t &scope_depth)
void free_element (scope_element &se)
void cleanup ()
std::size_t total_local_symb_size_bytes () const
std::size_t next_ip_index ()
expression_node_ptr get_variable (const T &v)
std::string get_vector_name (const T *data)

Private Member Functions

 scope_element_manager (const scope_element_manager &)
scope_element_manager & operator= (const scope_element_manager &)

Private Attributes

parser_t & parser_
std::vector< scope_element > element_
scope_element null_element_
std::size_t input_param_cnt_
std::size_t total_local_symb_size_bytes_

Detailed Description

template<typename T>
class exprtk::parser< T >::scope_element_manager

Definition at line 22745 of file exprtk.hpp.

Member Typedef Documentation

◆ expression_node_ptr

template<typename T>
typedef expression_node_t* exprtk::parser< T >::scope_element_manager::expression_node_ptr

Definition at line 22749 of file exprtk.hpp.

◆ parser_t

template<typename T>
typedef parser<T> exprtk::parser< T >::scope_element_manager::parser_t

Definition at line 22751 of file exprtk.hpp.

◆ variable_node_ptr

template<typename T>
typedef variable_node_t* exprtk::parser< T >::scope_element_manager::variable_node_ptr

Definition at line 22750 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ scope_element_manager() [1/2]

template<typename T>
exprtk::parser< T >::scope_element_manager::scope_element_manager ( parser< T > & p)
inlineexplicit

Definition at line 22753 of file exprtk.hpp.

References input_param_cnt_, exprtk::parser< T >::parser(), parser_, and total_local_symb_size_bytes_.

Referenced by operator=(), and scope_element_manager().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ scope_element_manager() [2/2]

template<typename T>
exprtk::parser< T >::scope_element_manager::scope_element_manager ( const scope_element_manager & )
private

References exprtk_delete, and scope_element_manager().

Here is the call graph for this function:

Member Function Documentation

◆ add_element()

template<typename T>
bool exprtk::parser< T >::scope_element_manager::add_element ( const scope_element & se)
inline

Definition at line 22820 of file exprtk.hpp.

22821 {
22822 for (std::size_t i = 0; i < element_.size(); ++i)
22823 {
22825
22826 if (
22827 details::imatch(cse.name, se.name) &&
22828 (cse.depth <= se.depth) &&
22829 (cse.index == se.index) &&
22830 (cse.size == se.size ) &&
22831 (cse.type == se.type ) &&
22832 (cse.active)
22833 )
22834 return false;
22835 }
22836
22837 switch (se.type)
22838 {
22840 break;
22841
22843 break;
22844
22846 break;
22847
22848 default : break;
22849 }
22850
22851 element_.push_back(se);
22852 std::sort(element_.begin(),element_.end());
22853
22854 return true;
22855 }
std::vector< scope_element > element_
Definition exprtk.hpp:22982

References exprtk::parser< T >::scope_element::active, exprtk::parser< T >::scope_element::depth, exprtk::parser< T >::scope_element::e_literal, exprtk::parser< T >::scope_element::e_variable, exprtk::parser< T >::scope_element::e_vector, element_, exprtk::details::imatch(), exprtk::parser< T >::scope_element::index, exprtk::parser< T >::scope_element::name, exprtk::parser< T >::scope_element::size, total_local_symb_size_bytes_, and exprtk::parser< T >::scope_element::type.

Here is the call graph for this function:

◆ cleanup()

template<typename T>
void exprtk::parser< T >::scope_element_manager::cleanup ( )
inline

Definition at line 22910 of file exprtk.hpp.

22911 {
22912 for (std::size_t i = 0; i < element_.size(); ++i)
22913 {
22915 }
22916
22917 element_.clear();
22918
22919 input_param_cnt_ = 0;
22921 }
void free_element(scope_element &se)
Definition exprtk.hpp:22877

References element_, free_element(), input_param_cnt_, and total_local_symb_size_bytes_.

Here is the call graph for this function:

◆ deactivate()

template<typename T>
void exprtk::parser< T >::scope_element_manager::deactivate ( const std::size_t & scope_depth)
inline

Definition at line 22857 of file exprtk.hpp.

22858 {
22859 exprtk_debug(("deactivate() - Scope depth: %d\n",
22860 static_cast<int>(parser_.state_.scope_depth)));
22861
22862 for (std::size_t i = 0; i < element_.size(); ++i)
22863 {
22865
22866 if (se.active && (se.depth >= scope_depth))
22867 {
22868 exprtk_debug(("deactivate() - element[%02d] '%s'\n",
22869 static_cast<int>(i),
22870 se.name.c_str()));
22871
22872 se.active = false;
22873 }
22874 }
22875 }
#define exprtk_debug(params)
Definition exprtk.hpp:64

References exprtk::parser< T >::scope_element::active, exprtk::parser< T >::scope_element::depth, element_, exprtk_debug, exprtk::parser< T >::scope_element::name, and parser_.

◆ empty()

template<typename T>
bool exprtk::parser< T >::scope_element_manager::empty ( ) const
inline

Definition at line 22764 of file exprtk.hpp.

22765 {
22766 return element_.empty();
22767 }

References element_.

◆ free_element()

template<typename T>
void exprtk::parser< T >::scope_element_manager::free_element ( scope_element & se)
inline

Definition at line 22877 of file exprtk.hpp.

22878 {
22879 exprtk_debug(("free_element() - se[%s]\n", se.name.c_str()));
22880
22881 switch (se.type)
22882 {
22883 case scope_element::e_literal : delete reinterpret_cast<T*>(se.data);
22884 delete se.var_node;
22885 break;
22886
22887 case scope_element::e_variable : delete reinterpret_cast<T*>(se.data);
22888 delete se.var_node;
22889 break;
22890
22891 case scope_element::e_vector : delete[] reinterpret_cast<T*>(se.data);
22892 delete se.vec_node;
22893 break;
22894
22895 case scope_element::e_vecelem : delete se.var_node;
22896 break;
22897
22898 #ifndef exprtk_disable_string_capabilities
22899 case scope_element::e_string : delete reinterpret_cast<std::string*>(se.data);
22900 delete se.str_node;
22901 break;
22902 #endif
22903
22904 default : return;
22905 }
22906
22907 se.clear();
22908 }

References exprtk::parser< T >::scope_element::clear(), exprtk::parser< T >::scope_element::data, exprtk::parser< T >::scope_element::e_literal, exprtk::parser< T >::scope_element::e_string, exprtk::parser< T >::scope_element::e_variable, exprtk::parser< T >::scope_element::e_vecelem, exprtk::parser< T >::scope_element::e_vector, exprtk_debug, exprtk::parser< T >::scope_element::name, exprtk::parser< T >::scope_element::str_node, exprtk::parser< T >::scope_element::type, exprtk::parser< T >::scope_element::var_node, and exprtk::parser< T >::scope_element::vec_node.

Referenced by cleanup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_active_element()

template<typename T>
scope_element & exprtk::parser< T >::scope_element_manager::get_active_element ( const std::string & var_name,
const std::size_t index = std::numeric_limits<std::size_t>::max() )
inline

Definition at line 22798 of file exprtk.hpp.

22800 {
22801 const std::size_t current_depth = parser_.state_.scope_depth;
22802
22803 for (std::size_t i = 0; i < element_.size(); ++i)
22804 {
22806
22807 if (se.depth > current_depth)
22808 continue;
22809 else if (
22810 details::imatch(se.name, var_name) &&
22811 (se.index == index) &&
22812 (se.active)
22813 )
22814 return se;
22815 }
22816
22817 return null_element_;
22818 }

References exprtk::parser< T >::scope_element::active, exprtk::parser< T >::scope_element::depth, element_, exprtk::details::imatch(), exprtk::parser< T >::scope_element::index, exprtk::parser< T >::scope_element::name, null_element_, and parser_.

Here is the call graph for this function:

◆ get_element() [1/2]

template<typename T>
scope_element & exprtk::parser< T >::scope_element_manager::get_element ( const std::size_t & index)
inline

Definition at line 22769 of file exprtk.hpp.

22770 {
22771 if (index < element_.size())
22772 return element_[index];
22773 else
22774 return null_element_;
22775 }

References element_, and null_element_.

◆ get_element() [2/2]

template<typename T>
scope_element & exprtk::parser< T >::scope_element_manager::get_element ( const std::string & var_name,
const std::size_t index = std::numeric_limits<std::size_t>::max() )
inline

Definition at line 22777 of file exprtk.hpp.

22779 {
22780 const std::size_t current_depth = parser_.state_.scope_depth;
22781
22782 for (std::size_t i = 0; i < element_.size(); ++i)
22783 {
22785
22786 if (se.depth > current_depth)
22787 continue;
22788 else if (
22789 details::imatch(se.name, var_name) &&
22790 (se.index == index)
22791 )
22792 return se;
22793 }
22794
22795 return null_element_;
22796 }

References exprtk::parser< T >::scope_element::depth, element_, exprtk::details::imatch(), exprtk::parser< T >::scope_element::index, exprtk::parser< T >::scope_element::name, null_element_, and parser_.

Here is the call graph for this function:

◆ get_variable()

template<typename T>
expression_node_ptr exprtk::parser< T >::scope_element_manager::get_variable ( const T & v)
inline

Definition at line 22933 of file exprtk.hpp.

22934 {
22935 for (std::size_t i = 0; i < element_.size(); ++i)
22936 {
22938
22939 if (
22940 se.active &&
22941 se.var_node &&
22943 )
22944 {
22945 variable_node_ptr vn = reinterpret_cast<variable_node_ptr>(se.var_node);
22946
22947 if (&(vn->ref()) == (&v))
22948 {
22949 return se.var_node;
22950 }
22951 }
22952 }
22953
22954 return expression_node_ptr(0);
22955 }
expression_node_t * expression_node_ptr
Definition exprtk.hpp:22749

References exprtk::parser< T >::scope_element::active, element_, exprtk::details::is_variable_node(), exprtk::details::variable_node< T >::ref(), and exprtk::parser< T >::scope_element::var_node.

Here is the call graph for this function:

◆ get_vector_name()

template<typename T>
std::string exprtk::parser< T >::scope_element_manager::get_vector_name ( const T * data)
inline

Definition at line 22957 of file exprtk.hpp.

22958 {
22959 for (std::size_t i = 0; i < element_.size(); ++i)
22960 {
22962
22963 if (
22964 se.active &&
22965 se.vec_node &&
22966 (se.vec_node->data() == data)
22967 )
22968 {
22969 return se.name;
22970 }
22971 }
22972
22973 return "neo-vector";
22974 }

References exprtk::parser< T >::scope_element::active, exprtk::details::vector_holder< Type >::data(), element_, exprtk::parser< T >::scope_element::name, and exprtk::parser< T >::scope_element::vec_node.

Here is the call graph for this function:

◆ next_ip_index()

template<typename T>
std::size_t exprtk::parser< T >::scope_element_manager::next_ip_index ( )
inline

Definition at line 22928 of file exprtk.hpp.

22929 {
22930 return ++input_param_cnt_;
22931 }

References input_param_cnt_.

◆ operator=()

template<typename T>
scope_element_manager & exprtk::parser< T >::scope_element_manager::operator= ( const scope_element_manager & )
private

References exprtk_delete, and scope_element_manager().

Here is the call graph for this function:

◆ size()

template<typename T>
std::size_t exprtk::parser< T >::scope_element_manager::size ( ) const
inline

Definition at line 22759 of file exprtk.hpp.

22760 {
22761 return element_.size();
22762 }

References element_.

◆ total_local_symb_size_bytes()

template<typename T>
std::size_t exprtk::parser< T >::scope_element_manager::total_local_symb_size_bytes ( ) const
inline

Definition at line 22923 of file exprtk.hpp.

22924 {
22926 }

References total_local_symb_size_bytes_.

Member Data Documentation

◆ element_

template<typename T>
std::vector<scope_element> exprtk::parser< T >::scope_element_manager::element_
private

◆ input_param_cnt_

template<typename T>
std::size_t exprtk::parser< T >::scope_element_manager::input_param_cnt_
private

Definition at line 22984 of file exprtk.hpp.

Referenced by cleanup(), next_ip_index(), and scope_element_manager().

◆ null_element_

template<typename T>
scope_element exprtk::parser< T >::scope_element_manager::null_element_
private

Definition at line 22983 of file exprtk.hpp.

Referenced by get_active_element(), get_element(), and get_element().

◆ parser_

template<typename T>
parser_t& exprtk::parser< T >::scope_element_manager::parser_
private

Definition at line 22981 of file exprtk.hpp.

Referenced by deactivate(), get_active_element(), get_element(), and scope_element_manager().

◆ total_local_symb_size_bytes_

template<typename T>
std::size_t exprtk::parser< T >::scope_element_manager::total_local_symb_size_bytes_
private

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