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

Public Types

typedef expression_node_texpression_node_ptr
 
typedef variable_node_tvariable_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_elementget_element (const std::size_t &index)
 
scope_elementget_element (const std::string &var_name, const std::size_t index=std::numeric_limits< std::size_t >::max())
 
scope_elementget_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 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_manageroperator= (const scope_element_manager &)
 

Private Attributes

parser_tparser_
 
std::vector< scope_elementelement_
 
scope_element null_element_
 
std::size_t input_param_cnt_
 

Detailed Description

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

Definition at line 22396 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 22400 of file exprtk.hpp.

◆ parser_t

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

Definition at line 22402 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 22401 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 22404 of file exprtk.hpp.

◆ scope_element_manager() [2/2]

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

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

22471 {
22472 for (std::size_t i = 0; i < element_.size(); ++i)
22473 {
22474 scope_element& cse = element_[i];
22475
22476 if (
22477 details::imatch(cse.name, se.name) &&
22478 (cse.depth <= se.depth) &&
22479 (cse.index == se.index) &&
22480 (cse.size == se.size ) &&
22481 (cse.type == se.type ) &&
22482 (cse.active)
22483 )
22484 return false;
22485 }
22486
22487 element_.push_back(se);
22488 std::sort(element_.begin(),element_.end());
22489
22490 return true;
22491 }
std::vector< scope_element > element_
Definition exprtk.hpp:22612
bool imatch(const char_t c1, const char_t c2)
Definition exprtk.hpp:190

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

Referenced by exprtk::parser< T >::parse_define_constvar_statement(), exprtk::parser< T >::parse_define_string_statement(), exprtk::parser< T >::parse_define_var_statement(), exprtk::parser< T >::parse_define_vector_statement(), exprtk::parser< T >::parse_for_loop(), exprtk::parser< T >::parse_uninitialised_var_statement(), and exprtk::parser< T >::expression_generator< Type >::vector_element().

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

◆ cleanup()

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

Definition at line 22546 of file exprtk.hpp.

22547 {
22548 for (std::size_t i = 0; i < element_.size(); ++i)
22549 {
22551 }
22552
22553 element_.clear();
22554
22555 input_param_cnt_ = 0;
22556 }
void free_element(scope_element &se)
Definition exprtk.hpp:22513

References exprtk::parser< T >::scope_element_manager::element_, exprtk::parser< T >::scope_element_manager::free_element(), and exprtk::parser< T >::scope_element_manager::input_param_cnt_.

Referenced by exprtk::parser< T >::compile().

Here is the call graph for this function:
Here is the caller 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 22493 of file exprtk.hpp.

22494 {
22495 exprtk_debug(("deactivate() - Scope depth: %d\n",
22496 static_cast<int>(parser_.state_.scope_depth)));
22497
22498 for (std::size_t i = 0; i < element_.size(); ++i)
22499 {
22500 scope_element& se = element_[i];
22501
22502 if (se.active && (se.depth >= scope_depth))
22503 {
22504 exprtk_debug(("deactivate() - element[%02d] '%s'\n",
22505 static_cast<int>(i),
22506 se.name.c_str()));
22507
22508 se.active = false;
22509 }
22510 }
22511 }
parser_state state_
Definition exprtk.hpp:41621
#define exprtk_debug(params)
Definition exprtk.hpp:64

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

Referenced by exprtk::parser< T >::scope_handler::~scope_handler().

Here is the caller graph for this function:

◆ empty()

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

Definition at line 22414 of file exprtk.hpp.

22415 {
22416 return element_.empty();
22417 }

References exprtk::parser< T >::scope_element_manager::element_.

Referenced by exprtk::parser< T >::parse_symbol(), and exprtk::parser< T >::parse_symtab_symbol().

Here is the caller graph for this function:

◆ free_element()

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

Definition at line 22513 of file exprtk.hpp.

22514 {
22515 exprtk_debug(("free_element() - se[%s]\n", se.name.c_str()));
22516
22517 switch (se.type)
22518 {
22519 case scope_element::e_literal : delete reinterpret_cast<T*>(se.data);
22520 delete se.var_node;
22521 break;
22522
22523 case scope_element::e_variable : delete reinterpret_cast<T*>(se.data);
22524 delete se.var_node;
22525 break;
22526
22527 case scope_element::e_vector : delete[] reinterpret_cast<T*>(se.data);
22528 delete se.vec_node;
22529 break;
22530
22531 case scope_element::e_vecelem : delete se.var_node;
22532 break;
22533
22534 #ifndef exprtk_disable_string_capabilities
22535 case scope_element::e_string : delete reinterpret_cast<std::string*>(se.data);
22536 delete se.str_node;
22537 break;
22538 #endif
22539
22540 default : return;
22541 }
22542
22543 se.clear();
22544 }

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 exprtk::parser< T >::scope_element_manager::cleanup(), exprtk::parser< T >::parse_define_constvar_statement(), exprtk::parser< T >::parse_define_string_statement(), exprtk::parser< T >::parse_define_var_statement(), exprtk::parser< T >::parse_define_vector_statement(), exprtk::parser< T >::parse_for_loop(), exprtk::parser< T >::parse_uninitialised_var_statement(), and exprtk::parser< T >::expression_generator< Type >::vector_element().

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

22450 {
22451 const std::size_t current_depth = parser_.state_.scope_depth;
22452
22453 for (std::size_t i = 0; i < element_.size(); ++i)
22454 {
22455 scope_element& se = element_[i];
22456
22457 if (se.depth > current_depth)
22458 continue;
22459 else if (
22460 details::imatch(se.name, var_name) &&
22461 (se.index == index) &&
22462 (se.active)
22463 )
22464 return se;
22465 }
22466
22467 return null_element_;
22468 }

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

Referenced by exprtk::parser< T >::parse_define_vector_statement(), exprtk::parser< T >::parse_string(), exprtk::parser< T >::parse_symtab_symbol(), and exprtk::parser< T >::parse_vector().

Here is the call graph for this function:
Here is the caller 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

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

22429 {
22430 const std::size_t current_depth = parser_.state_.scope_depth;
22431
22432 for (std::size_t i = 0; i < element_.size(); ++i)
22433 {
22434 scope_element& se = element_[i];
22435
22436 if (se.depth > current_depth)
22437 continue;
22438 else if (
22439 details::imatch(se.name, var_name) &&
22440 (se.index == index)
22441 )
22442 return se;
22443 }
22444
22445 return null_element_;
22446 }

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

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

22564 {
22565 for (std::size_t i = 0; i < element_.size(); ++i)
22566 {
22567 scope_element& se = element_[i];
22568
22569 if (
22570 se.active &&
22571 se.var_node &&
22572 details::is_variable_node(se.var_node)
22573 )
22574 {
22575 variable_node_ptr vn = reinterpret_cast<variable_node_ptr>(se.var_node);
22576
22577 if (&(vn->ref()) == (&v))
22578 {
22579 return se.var_node;
22580 }
22581 }
22582 }
22583
22584 return expression_node_ptr(0);
22585 }
expression_node_t * expression_node_ptr
Definition exprtk.hpp:22400
bool is_variable_node(const expression_node< T > *node)
Definition exprtk.hpp:5679

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

Referenced by exprtk::parser< T >::simplify_unary_negation_branch().

Here is the call graph for this function:
Here is the caller 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 22587 of file exprtk.hpp.

22588 {
22589 for (std::size_t i = 0; i < element_.size(); ++i)
22590 {
22591 scope_element& se = element_[i];
22592
22593 if (
22594 se.active &&
22595 se.vec_node &&
22596 (se.vec_node->data() == data)
22597 )
22598 {
22599 return se.name;
22600 }
22601 }
22602
22603 return "neo-vector";
22604 }

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

Referenced by exprtk::parser< T >::parse_pending_vector_index_operator().

Here is the call graph for this function:
Here is the caller 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 22558 of file exprtk.hpp.

22559 {
22560 return ++input_param_cnt_;
22561 }

References exprtk::parser< T >::scope_element_manager::input_param_cnt_.

Referenced by exprtk::parser< T >::parse_uninitialised_var_statement().

Here is the caller graph for this function:

◆ operator=()

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

◆ size()

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

Definition at line 22409 of file exprtk.hpp.

22410 {
22411 return element_.size();
22412 }

References exprtk::parser< T >::scope_element_manager::element_.

Referenced by exprtk::parser< T >::register_local_vars().

Here is the caller graph for this function:

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

◆ null_element_

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

◆ parser_

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

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