C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
exprtk::lexer::token_joiner Class Reference

#include <exprtk.hpp>

Inheritance diagram for exprtk::lexer::token_joiner:
[legend]
Collaboration diagram for exprtk::lexer::token_joiner:
[legend]

Public Member Functions

 token_joiner (const std::size_t &stride)
 
std::size_t process (generator &g)
 
virtual bool join (const token &, const token &, token &)
 
virtual bool join (const token &, const token &, const token &, token &)
 
- Public Member Functions inherited from exprtk::lexer::helper_interface
virtual void init ()
 
virtual void reset ()
 
virtual bool result ()
 
virtual ~helper_interface ()
 

Private Member Functions

std::size_t process_stride_2 (generator &g)
 
std::size_t process_stride_3 (generator &g)
 

Private Attributes

const std::size_t stride_
 

Detailed Description

Definition at line 3347 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ token_joiner()

exprtk::lexer::token_joiner::token_joiner ( const std::size_t &  stride)
inlineexplicit

Definition at line 3351 of file exprtk.hpp.

3352 : stride_(stride)
3353 {}
const std::size_t stride_
Definition exprtk.hpp:3458

Member Function Documentation

◆ join() [1/2]

virtual bool exprtk::lexer::token_joiner::join ( const token ,
const token ,
const token ,
token  
)
inlinevirtual

Reimplemented in exprtk::lexer::helper::operator_joiner.

Definition at line 3369 of file exprtk.hpp.

3369{ return false; }

◆ join() [2/2]

virtual bool exprtk::lexer::token_joiner::join ( const token ,
const token ,
token  
)
inlinevirtual

Reimplemented in exprtk::lexer::helper::operator_joiner.

Definition at line 3368 of file exprtk.hpp.

3368{ return false; }

Referenced by process_stride_2(), and process_stride_3().

Here is the caller graph for this function:

◆ process()

std::size_t exprtk::lexer::token_joiner::process ( generator g)
inlinevirtual

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 3355 of file exprtk.hpp.

3356 {
3357 if (g.token_list_.empty())
3358 return 0;
3359
3360 switch (stride_)
3361 {
3362 case 2 : return process_stride_2(g);
3363 case 3 : return process_stride_3(g);
3364 default : return 0;
3365 }
3366 }
std::size_t process_stride_3(generator &g)
Definition exprtk.hpp:3415
std::size_t process_stride_2(generator &g)
Definition exprtk.hpp:3373

References process_stride_2(), process_stride_3(), and stride_.

Referenced by exprtk::lexer::helper::helper_assembly::run_joiners().

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

◆ process_stride_2()

std::size_t exprtk::lexer::token_joiner::process_stride_2 ( generator g)
inlineprivate

Definition at line 3373 of file exprtk.hpp.

3374 {
3375 if (g.token_list_.size() < 2)
3376 return 0;
3377
3378 std::size_t changes = 0;
3379
3380 generator::token_list_t token_list;
3381 token_list.reserve(10000);
3382
3383 for (int i = 0; i < static_cast<int>(g.token_list_.size() - 1); ++i)
3384 {
3385 token t;
3386
3387 for ( ; ; )
3388 {
3389 if (!join(g[i], g[i + 1], t))
3390 {
3391 token_list.push_back(g[i]);
3392 break;
3393 }
3394
3395 token_list.push_back(t);
3396
3397 ++changes;
3398
3399 i += 2;
3400
3401 if (static_cast<std::size_t>(i) >= (g.token_list_.size() - 1))
3402 break;
3403 }
3404 }
3405
3406 token_list.push_back(g.token_list_.back());
3407
3408 assert(token_list.size() <= g.token_list_.size());
3409
3410 std::swap(token_list, g.token_list_);
3411
3412 return changes;
3413 }
std::vector< token_t > token_list_t
Definition exprtk.hpp:2408
virtual bool join(const token &, const token &, token &)
Definition exprtk.hpp:3368

References join(), and exprtk::lexer::generator::token_list_.

Referenced by process().

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

◆ process_stride_3()

std::size_t exprtk::lexer::token_joiner::process_stride_3 ( generator g)
inlineprivate

Definition at line 3415 of file exprtk.hpp.

3416 {
3417 if (g.token_list_.size() < 3)
3418 return 0;
3419
3420 std::size_t changes = 0;
3421
3422 generator::token_list_t token_list;
3423 token_list.reserve(10000);
3424
3425 for (int i = 0; i < static_cast<int>(g.token_list_.size() - 2); ++i)
3426 {
3427 token t;
3428
3429 for ( ; ; )
3430 {
3431 if (!join(g[i], g[i + 1], g[i + 2], t))
3432 {
3433 token_list.push_back(g[i]);
3434 break;
3435 }
3436
3437 token_list.push_back(t);
3438
3439 ++changes;
3440
3441 i += 3;
3442
3443 if (static_cast<std::size_t>(i) >= (g.token_list_.size() - 2))
3444 break;
3445 }
3446 }
3447
3448 token_list.push_back(*(g.token_list_.begin() + g.token_list_.size() - 2));
3449 token_list.push_back(*(g.token_list_.begin() + g.token_list_.size() - 1));
3450
3451 assert(token_list.size() <= g.token_list_.size());
3452
3453 std::swap(token_list, g.token_list_);
3454
3455 return changes;
3456 }

References join(), and exprtk::lexer::generator::token_list_.

Referenced by process().

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

Member Data Documentation

◆ stride_

const std::size_t exprtk::lexer::token_joiner::stride_
private

Definition at line 3458 of file exprtk.hpp.

Referenced by process().


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