C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Member Functions | List of all members
exprtk::lexer::helper::operator_joiner Class Reference
Inheritance diagram for exprtk::lexer::helper::operator_joiner:
[legend]
Collaboration diagram for exprtk::lexer::helper::operator_joiner:
[legend]

Public Member Functions

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

Detailed Description

Definition at line 3539 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ operator_joiner()

exprtk::lexer::helper::operator_joiner::operator_joiner ( const std::size_t &  stride)
inlineexplicit

Definition at line 3543 of file exprtk.hpp.

3544 : token_joiner(stride)
3545 {}
token_joiner(const std::size_t &stride)
Definition exprtk.hpp:3351

Member Function Documentation

◆ join() [1/2]

bool exprtk::lexer::helper::operator_joiner::join ( const lexer::token t0,
const lexer::token t1,
const lexer::token t2,
lexer::token t 
)
inlinevirtual

Reimplemented from exprtk::lexer::token_joiner.

Definition at line 3692 of file exprtk.hpp.

3696 {
3697 // '[ * ]' --> '[*]'
3698 if (
3699 (t0.type == lexer::token::e_lsqrbracket) &&
3700 (t1.type == lexer::token::e_mul ) &&
3701 (t2.type == lexer::token::e_rsqrbracket)
3702 )
3703 {
3704 t.type = lexer::token::e_symbol;
3705 t.value = "[*]";
3706 t.position = t0.position;
3707
3708 return true;
3709 }
3710 else
3711 return false;
3712 }

References exprtk::lexer::token::e_lsqrbracket, exprtk::lexer::token::e_mul, exprtk::lexer::token::e_rsqrbracket, and exprtk::lexer::token::e_symbol.

◆ join() [2/2]

bool exprtk::lexer::helper::operator_joiner::join ( const lexer::token t0,
const lexer::token t1,
lexer::token t 
)
inlinevirtual

Reimplemented from exprtk::lexer::token_joiner.

Definition at line 3547 of file exprtk.hpp.

3548 {
3549 // ': =' --> ':='
3550 if ((t0.type == lexer::token::e_colon) && (t1.type == lexer::token::e_eq))
3551 {
3552 t.type = lexer::token::e_assign;
3553 t.value = ":=";
3554 t.position = t0.position;
3555
3556 return true;
3557 }
3558 // '+ =' --> '+='
3559 else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_eq))
3560 {
3561 t.type = lexer::token::e_addass;
3562 t.value = "+=";
3563 t.position = t0.position;
3564
3565 return true;
3566 }
3567 // '- =' --> '-='
3568 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_eq))
3569 {
3570 t.type = lexer::token::e_subass;
3571 t.value = "-=";
3572 t.position = t0.position;
3573
3574 return true;
3575 }
3576 // '* =' --> '*='
3577 else if ((t0.type == lexer::token::e_mul) && (t1.type == lexer::token::e_eq))
3578 {
3579 t.type = lexer::token::e_mulass;
3580 t.value = "*=";
3581 t.position = t0.position;
3582
3583 return true;
3584 }
3585 // '/ =' --> '/='
3586 else if ((t0.type == lexer::token::e_div) && (t1.type == lexer::token::e_eq))
3587 {
3588 t.type = lexer::token::e_divass;
3589 t.value = "/=";
3590 t.position = t0.position;
3591
3592 return true;
3593 }
3594 // '% =' --> '%='
3595 else if ((t0.type == lexer::token::e_mod) && (t1.type == lexer::token::e_eq))
3596 {
3597 t.type = lexer::token::e_modass;
3598 t.value = "%=";
3599 t.position = t0.position;
3600
3601 return true;
3602 }
3603 // '> =' --> '>='
3604 else if ((t0.type == lexer::token::e_gt) && (t1.type == lexer::token::e_eq))
3605 {
3606 t.type = lexer::token::e_gte;
3607 t.value = ">=";
3608 t.position = t0.position;
3609
3610 return true;
3611 }
3612 // '< =' --> '<='
3613 else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_eq))
3614 {
3615 t.type = lexer::token::e_lte;
3616 t.value = "<=";
3617 t.position = t0.position;
3618
3619 return true;
3620 }
3621 // '= =' --> '=='
3622 else if ((t0.type == lexer::token::e_eq) && (t1.type == lexer::token::e_eq))
3623 {
3624 t.type = lexer::token::e_eq;
3625 t.value = "==";
3626 t.position = t0.position;
3627
3628 return true;
3629 }
3630 // '! =' --> '!='
3631 else if ((static_cast<details::char_t>(t0.type) == '!') && (t1.type == lexer::token::e_eq))
3632 {
3633 t.type = lexer::token::e_ne;
3634 t.value = "!=";
3635 t.position = t0.position;
3636
3637 return true;
3638 }
3639 // '< >' --> '<>'
3640 else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_gt))
3641 {
3642 t.type = lexer::token::e_ne;
3643 t.value = "<>";
3644 t.position = t0.position;
3645
3646 return true;
3647 }
3648 // '<= >' --> '<=>'
3649 else if ((t0.type == lexer::token::e_lte) && (t1.type == lexer::token::e_gt))
3650 {
3651 t.type = lexer::token::e_swap;
3652 t.value = "<=>";
3653 t.position = t0.position;
3654
3655 return true;
3656 }
3657 // '+ -' --> '-'
3658 else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_sub))
3659 {
3660 t.type = lexer::token::e_sub;
3661 t.value = "-";
3662 t.position = t0.position;
3663
3664 return true;
3665 }
3666 // '- +' --> '-'
3667 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_add))
3668 {
3669 t.type = lexer::token::e_sub;
3670 t.value = "-";
3671 t.position = t0.position;
3672
3673 return true;
3674 }
3675 // '- -' --> '+'
3676 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_sub))
3677 {
3678 /*
3679 Note: May need to reconsider this when wanting to implement
3680 pre/postfix decrement operator
3681 */
3682 t.type = lexer::token::e_add;
3683 t.value = "+";
3684 t.position = t0.position;
3685
3686 return true;
3687 }
3688 else
3689 return false;
3690 }

References exprtk::lexer::token::e_add, exprtk::lexer::token::e_addass, exprtk::lexer::token::e_assign, exprtk::lexer::token::e_colon, exprtk::lexer::token::e_div, exprtk::lexer::token::e_divass, exprtk::lexer::token::e_eq, exprtk::lexer::token::e_gt, exprtk::lexer::token::e_gte, exprtk::lexer::token::e_lt, exprtk::lexer::token::e_lte, exprtk::lexer::token::e_mod, exprtk::lexer::token::e_modass, exprtk::lexer::token::e_mul, exprtk::lexer::token::e_mulass, exprtk::lexer::token::e_ne, exprtk::lexer::token::e_sub, exprtk::lexer::token::e_subass, and exprtk::lexer::token::e_swap.


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