C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
exprtk::details::range_pack< T > Struct Template Reference

#include <exprtk.hpp>

Classes

struct  size_holder_t

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
template<typename StrBaseType>
bool operator() (std::size_t &r0, std::size_t &r1, const StrBaseType &str_base) const
std::size_t const_size () const
std::size_t cache_size () const

Public Attributes

std::pair< bool, expression_node_ptr > n0_e
std::pair< bool, expression_node_ptr > n1_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 8487 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 8490 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 8489 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ range_pack()

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

Definition at line 8506 of file exprtk.hpp.

8509 , n0_c (std::make_pair(false,0))
8510 , n1_c (std::make_pair(false,0))
8511 , cache(std::make_pair(0,0))
8512 {}
std::pair< bool, expression_node_ptr > n1_e
Definition exprtk.hpp:8616
expression_node< T > * expression_node_ptr
Definition exprtk.hpp:8489
std::pair< bool, std::size_t > n0_c
Definition exprtk.hpp:8617
std::pair< bool, std::size_t > n1_c
Definition exprtk.hpp:8618
std::pair< bool, expression_node_ptr > n0_e
Definition exprtk.hpp:8615

References cache, n0_c, n0_e, n1_c, and n1_e.

Member Function Documentation

◆ cache_size()

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

Definition at line 8610 of file exprtk.hpp.

8611 {
8612 return (cache.second - cache.first);
8613 }

References cache.

Referenced by exprtk::details::generic_function_node< T, StringFunction >::populate_value_list(), and 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 8514 of file exprtk.hpp.

8515 {
8518 n0_c = std::make_pair(false,0);
8519 n1_c = std::make_pair(false,0);
8520 cache = std::make_pair(0,0);
8521 }

References cache, n0_c, n0_e, n1_c, and n1_e.

Referenced by exprtk::parser< Type >::parse_const_string(), exprtk::parser< Type >::parse_range(), exprtk::parser< Type >::parse_string(), and exprtk::parser< Type >::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 8552 of file exprtk.hpp.

8553 {
8554 return ( n0_c.first && n1_c.first) &&
8555 (!n0_e.first && !n1_e.first);
8556 }

References n0_c, n0_e, n1_c, and n1_e.

Referenced by exprtk::details::generic_function_node< T, StringFunction >::init_branches(), and exprtk::parser< Type >::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 8605 of file exprtk.hpp.

8606 {
8607 return (n1_c.second - n0_c.second);
8608 }

References n0_c, and n1_c.

Referenced by exprtk::details::generic_function_node< T, StringFunction >::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 8523 of file exprtk.hpp.

8524 {
8525 if (n0_e.first && n0_e.second)
8526 {
8527 n0_e.first = false;
8528
8529 if (
8530 !is_variable_node(n0_e.second) &&
8531 !is_string_node (n0_e.second)
8532 )
8533 {
8534 destroy_node(n0_e.second);
8535 }
8536 }
8537
8538 if (n1_e.first && n1_e.second)
8539 {
8540 n1_e.first = false;
8541
8542 if (
8543 !is_variable_node(n1_e.second) &&
8544 !is_string_node (n1_e.second)
8545 )
8546 {
8547 destroy_node(n1_e.second);
8548 }
8549 }
8550 }
bool is_variable_node(const expression_node< T > *node)
Definition exprtk.hpp:5827
void destroy_node(expression_node< T > *&node)
Definition exprtk.hpp:6185

References exprtk::details::destroy_node(), exprtk::details::is_string_node(), exprtk::details::is_variable_node(), n0_e, and n1_e.

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

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

◆ operator()()

template<typename T>
template<typename StrBaseType>
bool exprtk::details::range_pack< T >::operator() ( std::size_t & r0,
std::size_t & r1,
const StrBaseType & str_base ) const
inline

Definition at line 8565 of file exprtk.hpp.

8566 {
8567 if (n0_c.first)
8568 r0 = n0_c.second;
8569 else if (n0_e.first)
8570 {
8571 r0 = static_cast<std::size_t>(details::numeric::to_int64(n0_e.second->value()));
8572 }
8573 else
8574 return false;
8575
8576 if (n1_c.first)
8577 r1 = n1_c.second;
8578 else if (n1_e.first)
8579 {
8580 r1 = static_cast<std::size_t>(details::numeric::to_int64(n1_e.second->value()));
8581 }
8582 else
8583 return false;
8584
8585 const std::size_t size = str_base.size();
8586
8587 if (
8590 )
8591 {
8592 r1 = size;
8593 }
8594
8595 cache.first = r0;
8596 cache.second = r1;
8597
8598 #ifdef exprtk_enable_range_runtime_checks
8599 return range_runtime_check(r0, r1, size);
8600 #else
8601 return (r0 <= r1) && (r1 <= size);
8602 #endif
8603 }
_int64_t to_int64(const T v)
Definition exprtk.hpp:1512

References cache, n0_c, n0_e, n1_c, 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 8558 of file exprtk.hpp.

8559 {
8560 return ( n0_e.first && n1_e.first) &&
8561 (!n0_c.first && !n1_c.first);
8562 }

References n0_c, n0_e, n1_c, and n1_e.

Member Data Documentation

◆ cache

◆ n0_c

◆ n0_e

template<typename T>
std::pair<bool,expression_node_ptr> exprtk::details::range_pack< T >::n0_e

◆ n1_c

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

◆ n1_e

template<typename T>
std::pair<bool,expression_node_ptr> exprtk::details::range_pack< T >::n1_e

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