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

3600 : token_joiner(stride)
3601 {}
token_joiner(const std::size_t &stride)
Definition exprtk.hpp:3407

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

3752 {
3753 // '[ * ]' --> '[*]'
3754 if (
3755 (t0.type == lexer::token::e_lsqrbracket) &&
3756 (t1.type == lexer::token::e_mul ) &&
3757 (t2.type == lexer::token::e_rsqrbracket)
3758 )
3759 {
3760 t.type = lexer::token::e_symbol;
3761 t.value = "[*]";
3762 t.position = t0.position;
3763
3764 return true;
3765 }
3766 else
3767 return false;
3768 }

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

3604 {
3605 // ': =' --> ':='
3606 if ((t0.type == lexer::token::e_colon) && (t1.type == lexer::token::e_eq))
3607 {
3608 t.type = lexer::token::e_assign;
3609 t.value = ":=";
3610 t.position = t0.position;
3611
3612 return true;
3613 }
3614 // '+ =' --> '+='
3615 else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_eq))
3616 {
3617 t.type = lexer::token::e_addass;
3618 t.value = "+=";
3619 t.position = t0.position;
3620
3621 return true;
3622 }
3623 // '- =' --> '-='
3624 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_eq))
3625 {
3626 t.type = lexer::token::e_subass;
3627 t.value = "-=";
3628 t.position = t0.position;
3629
3630 return true;
3631 }
3632 // '* =' --> '*='
3633 else if ((t0.type == lexer::token::e_mul) && (t1.type == lexer::token::e_eq))
3634 {
3635 t.type = lexer::token::e_mulass;
3636 t.value = "*=";
3637 t.position = t0.position;
3638
3639 return true;
3640 }
3641 // '/ =' --> '/='
3642 else if ((t0.type == lexer::token::e_div) && (t1.type == lexer::token::e_eq))
3643 {
3644 t.type = lexer::token::e_divass;
3645 t.value = "/=";
3646 t.position = t0.position;
3647
3648 return true;
3649 }
3650 // '% =' --> '%='
3651 else if ((t0.type == lexer::token::e_mod) && (t1.type == lexer::token::e_eq))
3652 {
3653 t.type = lexer::token::e_modass;
3654 t.value = "%=";
3655 t.position = t0.position;
3656
3657 return true;
3658 }
3659 // '> =' --> '>='
3660 else if ((t0.type == lexer::token::e_gt) && (t1.type == lexer::token::e_eq))
3661 {
3662 t.type = lexer::token::e_gte;
3663 t.value = ">=";
3664 t.position = t0.position;
3665
3666 return true;
3667 }
3668 // '< =' --> '<='
3669 else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_eq))
3670 {
3671 t.type = lexer::token::e_lte;
3672 t.value = "<=";
3673 t.position = t0.position;
3674
3675 return true;
3676 }
3677 // '= =' --> '=='
3678 else if ((t0.type == lexer::token::e_eq) && (t1.type == lexer::token::e_eq))
3679 {
3680 t.type = lexer::token::e_eq;
3681 t.value = "==";
3682 t.position = t0.position;
3683
3684 return true;
3685 }
3686 // '! =' --> '!='
3687 else if ((static_cast<details::char_t>(t0.type) == '!') && (t1.type == lexer::token::e_eq))
3688 {
3689 t.type = lexer::token::e_ne;
3690 t.value = "!=";
3691 t.position = t0.position;
3692
3693 return true;
3694 }
3695 // '< >' --> '<>'
3696 else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_gt))
3697 {
3698 t.type = lexer::token::e_ne;
3699 t.value = "<>";
3700 t.position = t0.position;
3701
3702 return true;
3703 }
3704 // '<= >' --> '<=>'
3705 else if ((t0.type == lexer::token::e_lte) && (t1.type == lexer::token::e_gt))
3706 {
3707 t.type = lexer::token::e_swap;
3708 t.value = "<=>";
3709 t.position = t0.position;
3710
3711 return true;
3712 }
3713 // '+ -' --> '-'
3714 else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_sub))
3715 {
3716 t.type = lexer::token::e_sub;
3717 t.value = "-";
3718 t.position = t0.position;
3719
3720 return true;
3721 }
3722 // '- +' --> '-'
3723 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_add))
3724 {
3725 t.type = lexer::token::e_sub;
3726 t.value = "-";
3727 t.position = t0.position;
3728
3729 return true;
3730 }
3731 // '- -' --> '+'
3732 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_sub))
3733 {
3734 /*
3735 Note: May need to reconsider this when wanting to implement
3736 pre/postfix decrement operator
3737 */
3738 t.type = lexer::token::e_add;
3739 t.value = "+";
3740 t.position = t0.position;
3741
3742 return true;
3743 }
3744 else
3745 return false;
3746 }

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: