From db0f147b72356c06c0a535bb55bcc390ece03720 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sat, 26 Apr 2014 13:48:16 -0700 Subject: [PATCH] A3t - Reordered recognition of PSEUDO, UDA and ATTRIBUTE, which is a better precedence. --- src/A3t.cpp | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/A3t.cpp b/src/A3t.cpp index 7b6edc2cb..07a808628 100644 --- a/src/A3t.cpp +++ b/src/A3t.cpp @@ -525,8 +525,13 @@ const std::string A3t::getFilterExpression () const for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) { // TODO Insert implicit "and", "(" and ")" operators. + } - if ((*i)->hasTag ("FILTER")) + // TODO Construct an efficient ID/UUID clause. + + for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) + { + if ((*i)->hasTag ("FILTER") && ! (*i)->hasTag ("PSEUDO")) { if ((*i)->hasTag ("ID")) { @@ -740,7 +745,21 @@ void A3t::findAttribute () n.getUntilEOS (value)) { std::string canonical; - if (canonicalize (canonical, "attribute", name)) + if (canonicalize (canonical, "uda", name)) + { + (*i)->tag ("UDA"); + (*i)->tag ("MODIFIABLE"); + } + + else if (canonicalize (canonical, "pseudo", name)) + { + (*i)->unTag ("?"); + (*i)->tag ("PSEUDO"); + (*i)->attribute ("name", canonical); + (*i)->attribute ("value", value); + } + + else if (canonicalize (canonical, "attribute", name)) { (*i)->unTag ("?"); (*i)->tag ("ATTRIBUTE"); @@ -755,20 +774,6 @@ void A3t::findAttribute () (*i)->tag ("MODIFIABLE"); } } - - else if (canonicalize (canonical, "uda", name)) - { - (*i)->tag ("UDA"); - (*i)->tag ("MODIFIABLE"); - } - - else if (canonicalize (canonical, "pseudo", name)) - { - (*i)->unTag ("?"); - (*i)->tag ("PSEUDO"); - (*i)->attribute ("name", canonical); - (*i)->attribute ("value", value); - } } } }