|
23 | 23 | namespace jsoncons {
|
24 | 24 | namespace jmespath {
|
25 | 25 |
|
| 26 | + enum class parameter_kind{value, expression}; |
| 27 | + |
| 28 | + class parameter |
| 29 | + { |
| 30 | + parameter_kind type_; |
| 31 | + |
| 32 | + union |
| 33 | + { |
| 34 | + expression_base* expression_; |
| 35 | + pointer value_; |
| 36 | + }; |
| 37 | + |
| 38 | + public: |
| 39 | + |
| 40 | + parameter(const parameter& other) noexcept |
| 41 | + : type_(other.type_) |
| 42 | + { |
| 43 | + switch (type_) |
| 44 | + { |
| 45 | + case parameter_kind::expression: |
| 46 | + expression_ = other.expression_; |
| 47 | + break; |
| 48 | + case parameter_kind::value: |
| 49 | + value_ = other.value_; |
| 50 | + break; |
| 51 | + default: |
| 52 | + break; |
| 53 | + } |
| 54 | + } |
| 55 | + |
| 56 | + parameter(reference value) noexcept |
| 57 | + : type_(parameter_kind::value), value_(std::addressof(value)) |
| 58 | + { |
| 59 | + } |
| 60 | + |
| 61 | + parameter(expression_base* expression) noexcept |
| 62 | + : type_(parameter_kind::expression), expression_(expression) |
| 63 | + { |
| 64 | + } |
| 65 | + |
| 66 | + parameter& operator=(const parameter& other) |
| 67 | + { |
| 68 | + if (&other != this) |
| 69 | + { |
| 70 | + type_ = other.type_; |
| 71 | + switch (type_) |
| 72 | + { |
| 73 | + case parameter_kind::expression: |
| 74 | + expression_ = other.expression_; |
| 75 | + break; |
| 76 | + case parameter_kind::value: |
| 77 | + value_ = other.value_; |
| 78 | + break; |
| 79 | + default: |
| 80 | + break; |
| 81 | + } |
| 82 | + } |
| 83 | + return *this; |
| 84 | + } |
| 85 | + |
| 86 | + bool is_value() const |
| 87 | + { |
| 88 | + return type_ == parameter_kind::value; |
| 89 | + } |
| 90 | + |
| 91 | + bool is_expression() const |
| 92 | + { |
| 93 | + return type_ == parameter_kind::expression; |
| 94 | + } |
| 95 | + |
| 96 | + const Json& value() const |
| 97 | + { |
| 98 | + return *value_; |
| 99 | + } |
| 100 | + |
| 101 | + const expression_base& expression() const |
| 102 | + { |
| 103 | + return *expression_; |
| 104 | + } |
| 105 | + }; |
| 106 | + |
26 | 107 | enum class operator_kind
|
27 | 108 | {
|
28 | 109 | default_op, // Identifier, CurrentNode, Index, MultiSelectList, MultiSelectHash, FunctionExpression
|
@@ -602,89 +683,6 @@ namespace jmespath {
|
602 | 683 | }
|
603 | 684 | };
|
604 | 685 |
|
605 |
| - // parameter |
606 |
| - |
607 |
| - enum class parameter_kind{value, expression}; |
608 |
| - |
609 |
| - class parameter |
610 |
| - { |
611 |
| - parameter_kind type_; |
612 |
| - |
613 |
| - union |
614 |
| - { |
615 |
| - expression_base* expression_; |
616 |
| - pointer value_; |
617 |
| - }; |
618 |
| - |
619 |
| - public: |
620 |
| - |
621 |
| - parameter(const parameter& other) noexcept |
622 |
| - : type_(other.type_) |
623 |
| - { |
624 |
| - switch (type_) |
625 |
| - { |
626 |
| - case parameter_kind::expression: |
627 |
| - expression_ = other.expression_; |
628 |
| - break; |
629 |
| - case parameter_kind::value: |
630 |
| - value_ = other.value_; |
631 |
| - break; |
632 |
| - default: |
633 |
| - break; |
634 |
| - } |
635 |
| - } |
636 |
| - |
637 |
| - parameter(reference value) noexcept |
638 |
| - : type_(parameter_kind::value), value_(std::addressof(value)) |
639 |
| - { |
640 |
| - } |
641 |
| - |
642 |
| - parameter(expression_base* expression) noexcept |
643 |
| - : type_(parameter_kind::expression), expression_(expression) |
644 |
| - { |
645 |
| - } |
646 |
| - |
647 |
| - parameter& operator=(const parameter& other) |
648 |
| - { |
649 |
| - if (&other != this) |
650 |
| - { |
651 |
| - type_ = other.type_; |
652 |
| - switch (type_) |
653 |
| - { |
654 |
| - case parameter_kind::expression: |
655 |
| - expression_ = other.expression_; |
656 |
| - break; |
657 |
| - case parameter_kind::value: |
658 |
| - value_ = other.value_; |
659 |
| - break; |
660 |
| - default: |
661 |
| - break; |
662 |
| - } |
663 |
| - } |
664 |
| - return *this; |
665 |
| - } |
666 |
| - |
667 |
| - bool is_value() const |
668 |
| - { |
669 |
| - return type_ == parameter_kind::value; |
670 |
| - } |
671 |
| - |
672 |
| - bool is_expression() const |
673 |
| - { |
674 |
| - return type_ == parameter_kind::expression; |
675 |
| - } |
676 |
| - |
677 |
| - const Json& value() const |
678 |
| - { |
679 |
| - return *value_; |
680 |
| - } |
681 |
| - |
682 |
| - const expression_base& expression() const |
683 |
| - { |
684 |
| - return *expression_; |
685 |
| - } |
686 |
| - }; |
687 |
| - |
688 | 686 | // function_base
|
689 | 687 | class function_base
|
690 | 688 | {
|
|
0 commit comments