diff options
Diffstat (limited to 'project2/if.cpp')
| -rw-r--r-- | project2/if.cpp | 33 | 
1 files changed, 17 insertions, 16 deletions
| diff --git a/project2/if.cpp b/project2/if.cpp index 3474815..5fa7a8c 100644 --- a/project2/if.cpp +++ b/project2/if.cpp @@ -1,8 +1,8 @@  #include "if.h" -#include "appEngine.h"  #include "logger.h"  #include "xmlObjectLoader.h"  #include <boost/foreach.hpp> +#include <algorithm>  DECLARE_LOADER("if", If); @@ -11,29 +11,30 @@ SimpleMessageException(IfModeIsNonsense);  IfSet::IfSet(const xmlpp::Element * e) :  	mode(e->get_attribute_value("mode") == "or" ? Or : And)  { -	LoaderBase loader(ApplicationEngine::getCurrent()->env()->getXmlNamespace(), true); +	LoaderBase loader(true);  	loader.supportedStorers.insert(Storer::into(&checks));  	loader.collectAll(e, true, IgnoreUnsupported);  } +template <class Range, class Pred> +bool all(const Range & c, const Pred & p) +{ +		return (std::find_if(c.begin(), c.end(), !p) == c.end()); +} +template <class Range, class Pred> +bool any(const Range & c, const Pred & p) +{ +		return (std::find_if(c.begin(), c.end(), p) != c.end()); +} +  bool  IfSet::passes() const  {  	if (mode == And) { -		BOOST_FOREACH(const ParamCheckers::value_type & pc, checks.get<bySOOrder>()) { -			if (!pc->performCheck()) { -				return false; -			} -		} -		return true; +		return all(checks.get<bySOOrder>(), boost::bind(&ParamChecker::performCheck, _1));  	} -	else { -		BOOST_FOREACH(const ParamCheckers::value_type & pc, checks.get<bySOOrder>()) { -			if (pc->performCheck()) { -				return true; -			} -		} -		return false; +	else if (mode == Or) { +		return any(checks.get<bySOOrder>(), boost::bind(&ParamChecker::performCheck, _1));  	}  	throw IfModeIsNonsense(getName());  } @@ -45,7 +46,7 @@ If::If(const xmlpp::Element * e) :  	IfSet(e),  	localErrorHandling(e->get_attribute_value("errorHandling") == "local")  { -	LoaderBase loader(ApplicationEngine::getCurrent()->env()->getXmlNamespace(), true); +	LoaderBase loader(true);  	loader.supportedStorers.insert(new NOEErrorStorer(&normNOEs, &errorNOEs));  	loader.supportedStorers.insert(Storer::into(&subViews));  	loader.collectAll(e, true, IgnoreUnsupported); | 
