C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
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 3411 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ token_joiner()

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

Definition at line 3415 of file exprtk.hpp.

3416 : stride_(stride)
3417 {}
const std::size_t stride_
Definition exprtk.hpp:3522

References stride_.

Referenced by exprtk::lexer::helper::operator_joiner::operator_joiner().

Here is the caller graph for this function:

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

3433{ 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 3432 of file exprtk.hpp.

3432{ 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 3419 of file exprtk.hpp.

3420 {
3421 if (g.token_list_.empty())
3422 return 0;
3423
3424 switch (stride_)
3425 {
3426 case 2 : return process_stride_2(g);
3427 case 3 : return process_stride_3(g);
3428 default : return 0;
3429 }
3430 }
std::size_t process_stride_3(generator &g)
Definition exprtk.hpp:3479
std::size_t process_stride_2(generator &g)
Definition exprtk.hpp:3437

References exprtk_override, 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 3437 of file exprtk.hpp.

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

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

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

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

Referenced by process(), and token_joiner().


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