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

Constructor & Destructor Documentation

◆ token_joiner()

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

Definition at line 3407 of file exprtk.hpp.

3408 : stride_(stride)
3409 {}
const std::size_t stride_
Definition exprtk.hpp:3514

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

3425{ 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 3424 of file exprtk.hpp.

3424{ 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 3411 of file exprtk.hpp.

3412 {
3413 if (g.token_list_.empty())
3414 return 0;
3415
3416 switch (stride_)
3417 {
3418 case 2 : return process_stride_2(g);
3419 case 3 : return process_stride_3(g);
3420 default : return 0;
3421 }
3422 }
std::size_t process_stride_3(generator &g)
Definition exprtk.hpp:3471
std::size_t process_stride_2(generator &g)
Definition exprtk.hpp:3429

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

3430 {
3431 if (g.token_list_.size() < 2)
3432 return 0;
3433
3434 std::size_t changes = 0;
3435
3436 generator::token_list_t token_list;
3437 token_list.reserve(10000);
3438
3439 for (int i = 0; i < static_cast<int>(g.token_list_.size() - 1); ++i)
3440 {
3441 token t;
3442
3443 for ( ; ; )
3444 {
3445 if (!join(g[i], g[i + 1], t))
3446 {
3447 token_list.push_back(g[i]);
3448 break;
3449 }
3450
3451 token_list.push_back(t);
3452
3453 ++changes;
3454
3455 i += 2;
3456
3457 if (static_cast<std::size_t>(i) >= (g.token_list_.size() - 1))
3458 break;
3459 }
3460 }
3461
3462 token_list.push_back(g.token_list_.back());
3463
3464 assert(token_list.size() <= g.token_list_.size());
3465
3466 std::swap(token_list, g.token_list_);
3467
3468 return changes;
3469 }
std::vector< token_t > token_list_t
Definition exprtk.hpp:2462
virtual bool join(const token &, const token &, token &)
Definition exprtk.hpp:3424

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

3472 {
3473 if (g.token_list_.size() < 3)
3474 return 0;
3475
3476 std::size_t changes = 0;
3477
3478 generator::token_list_t token_list;
3479 token_list.reserve(10000);
3480
3481 for (int i = 0; i < static_cast<int>(g.token_list_.size() - 2); ++i)
3482 {
3483 token t;
3484
3485 for ( ; ; )
3486 {
3487 if (!join(g[i], g[i + 1], g[i + 2], t))
3488 {
3489 token_list.push_back(g[i]);
3490 break;
3491 }
3492
3493 token_list.push_back(t);
3494
3495 ++changes;
3496
3497 i += 3;
3498
3499 if (static_cast<std::size_t>(i) >= (g.token_list_.size() - 2))
3500 break;
3501 }
3502 }
3503
3504 token_list.push_back(*(g.token_list_.begin() + g.token_list_.size() - 2));
3505 token_list.push_back(*(g.token_list_.begin() + g.token_list_.size() - 1));
3506
3507 assert(token_list.size() <= g.token_list_.size());
3508
3509 std::swap(token_list, g.token_list_);
3510
3511 return changes;
3512 }

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

Referenced by process().


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