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 8298 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 8301 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 8300 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ range_pack()

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

Definition at line 8303 of file exprtk.hpp.

8304 : n0_e (std::make_pair(false,expression_node_ptr(0)))
8305 , n1_e (std::make_pair(false,expression_node_ptr(0)))
8306 , n0_c (std::make_pair(false,0))
8307 , n1_c (std::make_pair(false,0))
8308 , cache(std::make_pair(0,0))
8309 {}
std::pair< bool, expression_node_ptr > n1_e
Definition exprtk.hpp:8411
expression_node< T > * expression_node_ptr
Definition exprtk.hpp:8300
std::pair< bool, std::size_t > n0_c
Definition exprtk.hpp:8412
std::pair< bool, std::size_t > n1_c
Definition exprtk.hpp:8413
std::pair< bool, expression_node_ptr > n0_e
Definition exprtk.hpp:8410

Member Function Documentation

◆ cache_size()

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

Definition at line 8405 of file exprtk.hpp.

8406 {
8407 return (cache.second - cache.first);
8408 }

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

8312 {
8313 n0_e = std::make_pair(false,expression_node_ptr(0));
8314 n1_e = std::make_pair(false,expression_node_ptr(0));
8315 n0_c = std::make_pair(false,0);
8316 n1_c = std::make_pair(false,0);
8317 cache = std::make_pair(0,0);
8318 }

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

8350 {
8351 return ( n0_c.first && n1_c.first) &&
8352 (!n0_e.first && !n1_e.first);
8353 }

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

8401 {
8402 return (n1_c.second - n0_c.second);
8403 }

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

8321 {
8322 if (n0_e.first && n0_e.second)
8323 {
8324 n0_e.first = false;
8325
8326 if (
8327 !is_variable_node(n0_e.second) &&
8328 !is_string_node (n0_e.second)
8329 )
8330 {
8331 destroy_node(n0_e.second);
8332 }
8333 }
8334
8335 if (n1_e.first && n1_e.second)
8336 {
8337 n1_e.first = false;
8338
8339 if (
8340 !is_variable_node(n1_e.second) &&
8341 !is_string_node (n1_e.second)
8342 )
8343 {
8344 destroy_node(n1_e.second);
8345 }
8346 }
8347 }
bool is_string_node(const expression_node< T > *node)
Definition exprtk.hpp:18919
bool is_variable_node(const expression_node< T > *node)
Definition exprtk.hpp:5679
void destroy_node(expression_node< T > *&node)
Definition exprtk.hpp:6019

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

8363 {
8364 if (n0_c.first)
8365 r0 = n0_c.second;
8366 else if (n0_e.first)
8367 {
8368 r0 = static_cast<std::size_t>(details::numeric::to_int64(n0_e.second->value()));
8369 }
8370 else
8371 return false;
8372
8373 if (n1_c.first)
8374 r1 = n1_c.second;
8375 else if (n1_e.first)
8376 {
8377 r1 = static_cast<std::size_t>(details::numeric::to_int64(n1_e.second->value()));
8378 }
8379 else
8380 return false;
8381
8382 if (
8383 (std::numeric_limits<std::size_t>::max() != size) &&
8384 (std::numeric_limits<std::size_t>::max() == r1 )
8385 )
8386 {
8387 r1 = size;
8388 }
8389
8390 cache.first = r0;
8391 cache.second = r1;
8392
8393 #ifndef exprtk_enable_range_runtime_checks
8394 return (r0 <= r1);
8395 #else
8396 return range_runtime_check(r0, r1, size);
8397 #endif
8398 }
_int64_t to_int64(const T v)
Definition exprtk.hpp:1471
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:598

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

8356 {
8357 return ( n0_e.first && n1_e.first) &&
8358 (!n0_c.first && !n1_c.first);
8359 }

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: