MCPcopy Create free account
hub / github.com/AMReX-Codes/amrex / parser_node_compare

Function parser_node_compare

Src/Base/Parser/AMReX_Parser_Y.cpp:640–682  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

638 }
639
640 bool parser_node_compare (struct parser_node* a, struct parser_node* b)
641 {
642 if ((a->type) < (b->type)) {
643 return true;
644 } else if ((a->type) == (b->type)) {
645 switch (a->type)
646 {
647 case PARSER_NUMBER:
648 return parser_get_number(a) < parser_get_number(b);
649 case PARSER_SYMBOL:
650 return std::strcmp(parser_get_name(a),
651 parser_get_name(b)) < 0;
652 case PARSER_ADD:
653 case PARSER_SUB:
654 case PARSER_MUL:
655 case PARSER_DIV:
656 return parser_node_compare(a->r, b->r) ||
657 (parser_node_equal(a->r, b->r) &&
658 parser_node_compare(a->l, b->l));
659 case PARSER_F1:
660 return (((struct parser_f1*)(a))->ftype <
661 ((struct parser_f1*)(b))->ftype) ||
662 ((((struct parser_f1*)(a))->ftype ==
663 ((struct parser_f1*)(b))->ftype) &&
664 parser_node_compare(a->l,b->l));
665 case PARSER_F2:
666 if (((struct parser_f2*)(a))->ftype <
667 ((struct parser_f2*)(b))->ftype) {
668 return true;
669 } else if (((struct parser_f2*)(a))->ftype ==
670 ((struct parser_f2*)(b))->ftype) {
671 return parser_node_compare(a->r, b->r) ||
672 (parser_node_equal(a->r, b->r) &&
673 parser_node_compare(a->l, b->l));
674 } else {
675 return false;
676 }
677 default:
678 return false;
679 }
680 }
681 return false;
682 }
683
684 template <typename F>
685 bool group_combinables (struct parser_node*& a, struct parser_node*& b,

Callers 1

parser_ast_sortFunction · 0.85

Calls 3

parser_get_numberFunction · 0.85
parser_get_nameFunction · 0.85
parser_node_equalFunction · 0.85

Tested by

no test coverage detected