C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | List of all members
exprtk::details::range_pack< T > Struct Template Reference

Public Types

typedef expression_node< T > * expression_node_ptr
 
typedef std::pair< std::size_t, std::size_t > cached_range_t
 

Public Member Functions

 range_pack ()
 
void clear ()
 
void free ()
 
bool const_range () const
 
bool var_range () const
 
bool operator() (std::size_t &r0, std::size_t &r1, const std::size_t &size=std::numeric_limits< std::size_t >::max()) const
 
std::size_t const_size () const
 
std::size_t cache_size () const
 

Public Attributes

std::pair< bool, expression_node_ptrn0_e
 
std::pair< bool, expression_node_ptrn1_e
 
std::pair< bool, std::size_t > n0_c
 
std::pair< bool, std::size_t > n1_c
 
cached_range_t cache
 

Detailed Description

template<typename T>
struct exprtk::details::range_pack< T >

Definition at line 8465 of file exprtk.hpp.

Member Typedef Documentation

◆ cached_range_t

template<typename T >
typedef std::pair<std::size_t,std::size_t> exprtk::details::range_pack< T >::cached_range_t

Definition at line 8468 of file exprtk.hpp.

◆ expression_node_ptr

template<typename T >
typedef expression_node<T>* exprtk::details::range_pack< T >::expression_node_ptr

Definition at line 8467 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ range_pack()

template<typename T >
exprtk::details::range_pack< T >::range_pack ( )
inline

Definition at line 8470 of file exprtk.hpp.

8471 : n0_e (std::make_pair(false,expression_node_ptr(0)))
8472 , n1_e (std::make_pair(false,expression_node_ptr(0)))
8473 , n0_c (std::make_pair(false,0))
8474 , n1_c (std::make_pair(false,0))
8475 , cache(std::make_pair(0,0))
8476 {}
std::pair< bool, expression_node_ptr > n1_e
Definition exprtk.hpp:8578
expression_node< T > * expression_node_ptr
Definition exprtk.hpp:8467
std::pair< bool, std::size_t > n0_c
Definition exprtk.hpp:8579
std::pair< bool, std::size_t > n1_c
Definition exprtk.hpp:8580
std::pair< bool, expression_node_ptr > n0_e
Definition exprtk.hpp:8577

Member Function Documentation

◆ cache_size()

template<typename T >
std::size_t exprtk::details::range_pack< T >::cache_size ( ) const
inline

Definition at line 8572 of file exprtk.hpp.

8573 {
8574 return (cache.second - cache.first);
8575 }

References exprtk::details::range_pack< T >::cache.

Referenced by exprtk::details::swap_genstrings_node< T >::value().

Here is the caller graph for this function:

◆ clear()

template<typename T >
void exprtk::details::range_pack< T >::clear ( )
inline

Definition at line 8478 of file exprtk.hpp.

8479 {
8480 n0_e = std::make_pair(false,expression_node_ptr(0));
8481 n1_e = std::make_pair(false,expression_node_ptr(0));
8482 n0_c = std::make_pair(false,0);
8483 n1_c = std::make_pair(false,0);
8484 cache = std::make_pair(0,0);
8485 }

References exprtk::details::range_pack< T >::cache, exprtk::details::range_pack< T >::n0_c, exprtk::details::range_pack< T >::n0_e, exprtk::details::range_pack< T >::n1_c, and exprtk::details::range_pack< T >::n1_e.

Referenced by exprtk::parser< T >::parse_const_string(), exprtk::parser< T >::parse_range(), exprtk::parser< T >::parse_string(), and exprtk::parser< T >::parse_string_range_statement().

Here is the caller graph for this function:

◆ const_range()

template<typename T >
bool exprtk::details::range_pack< T >::const_range ( ) const
inline

Definition at line 8516 of file exprtk.hpp.

8517 {
8518 return ( n0_c.first && n1_c.first) &&
8519 (!n0_e.first && !n1_e.first);
8520 }

References exprtk::details::range_pack< T >::n0_c, exprtk::details::range_pack< T >::n0_e, exprtk::details::range_pack< T >::n1_c, and exprtk::details::range_pack< T >::n1_e.

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

Here is the caller graph for this function:

◆ const_size()

template<typename T >
std::size_t exprtk::details::range_pack< T >::const_size ( ) const
inline

Definition at line 8567 of file exprtk.hpp.

8568 {
8569 return (n1_c.second - n0_c.second);
8570 }

References exprtk::details::range_pack< T >::n0_c, and exprtk::details::range_pack< T >::n1_c.

Referenced by exprtk::details::generic_function_node< T, GenericFunction >::init_branches().

Here is the caller graph for this function:

◆ free()

template<typename T >
void exprtk::details::range_pack< T >::free ( )
inline

Definition at line 8487 of file exprtk.hpp.

8488 {
8489 if (n0_e.first && n0_e.second)
8490 {
8491 n0_e.first = false;
8492
8493 if (
8494 !is_variable_node(n0_e.second) &&
8495 !is_string_node (n0_e.second)
8496 )
8497 {
8498 destroy_node(n0_e.second);
8499 }
8500 }
8501
8502 if (n1_e.first && n1_e.second)
8503 {
8504 n1_e.first = false;
8505
8506 if (
8507 !is_variable_node(n1_e.second) &&
8508 !is_string_node (n1_e.second)
8509 )
8510 {
8511 destroy_node(n1_e.second);
8512 }
8513 }
8514 }
bool is_string_node(const expression_node< T > *node)
Definition exprtk.hpp:19118
bool is_variable_node(const expression_node< T > *node)
Definition exprtk.hpp:5806
void destroy_node(expression_node< T > *&node)
Definition exprtk.hpp:6164

References exprtk::details::destroy_node(), exprtk::details::is_string_node(), exprtk::details::is_variable_node(), exprtk::details::range_pack< T >::n0_e, and exprtk::details::range_pack< T >::n1_e.

Referenced by exprtk::parser< T >::parse_const_string(), exprtk::parser< T >::parse_range(), exprtk::parser< T >::parse_string_range_statement(), exprtk::details::const_string_range_node< T >::~const_string_range_node(), exprtk::details::generic_string_range_node< T >::~generic_string_range_node(), and exprtk::details::string_range_node< T >::~string_range_node().

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

◆ operator()()

template<typename T >
bool exprtk::details::range_pack< T >::operator() ( std::size_t &  r0,
std::size_t &  r1,
const std::size_t &  size = std::numeric_limits<std::size_t>::max() 
) const
inline

Definition at line 8528 of file exprtk.hpp.

8530 {
8531 if (n0_c.first)
8532 r0 = n0_c.second;
8533 else if (n0_e.first)
8534 {
8535 r0 = static_cast<std::size_t>(details::numeric::to_int64(n0_e.second->value()));
8536 }
8537 else
8538 return false;
8539
8540 if (n1_c.first)
8541 r1 = n1_c.second;
8542 else if (n1_e.first)
8543 {
8544 r1 = static_cast<std::size_t>(details::numeric::to_int64(n1_e.second->value()));
8545 }
8546 else
8547 return false;
8548
8549 if (
8550 (std::numeric_limits<std::size_t>::max() != size) &&
8551 (std::numeric_limits<std::size_t>::max() == r1 )
8552 )
8553 {
8554 r1 = size;
8555 }
8556
8557 cache.first = r0;
8558 cache.second = r1;
8559
8560 #ifndef exprtk_enable_range_runtime_checks
8561 return (r0 <= r1);
8562 #else
8563 return range_runtime_check(r0, r1, size);
8564 #endif
8565 }
_int64_t to_int64(const T v)
Definition exprtk.hpp:1512
bool match_impl(const Iterator pattern_begin, const Iterator pattern_end, const Iterator data_begin, const Iterator data_end, const typename std::iterator_traits< Iterator >::value_type &zero_or_more, const typename std::iterator_traits< Iterator >::value_type &exactly_one)
Definition exprtk.hpp:605

References exprtk::details::range_pack< T >::cache, exprtk::details::match_impl(), exprtk::details::range_pack< T >::n0_c, exprtk::details::range_pack< T >::n0_e, exprtk::details::range_pack< T >::n1_c, exprtk::details::range_pack< T >::n1_e, and exprtk::details::numeric::to_int64().

Here is the call graph for this function:

◆ var_range()

template<typename T >
bool exprtk::details::range_pack< T >::var_range ( ) const
inline

Definition at line 8522 of file exprtk.hpp.

8523 {
8524 return ( n0_e.first && n1_e.first) &&
8525 (!n0_c.first && !n1_c.first);
8526 }

References exprtk::details::range_pack< T >::n0_c, exprtk::details::range_pack< T >::n0_e, exprtk::details::range_pack< T >::n1_c, and exprtk::details::range_pack< T >::n1_e.

Member Data Documentation

◆ cache

template<typename T >
cached_range_t exprtk::details::range_pack< T >::cache
mutable

◆ n0_c

template<typename T >
std::pair<bool,std::size_t > exprtk::details::range_pack< T >::n0_c

◆ n0_e

◆ n1_c

template<typename T >
std::pair<bool,std::size_t > exprtk::details::range_pack< T >::n1_c

◆ n1_e


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