--- trunk/src/io/ParamConstraint.hpp 2005/10/14 21:43:13 672 +++ trunk/src/io/ParamConstraint.hpp 2005/10/17 19:24:02 678 @@ -42,6 +42,8 @@ #ifndef IO_PARAMCONSTRAINT_HPP #define IO_PARAMCONSTRAINT_HPP #include +#include "utils/CaseConversion.hpp" +#include "utils/StringTokenizer.hpp" /** * This class allows to recognize constraint predicates, so that they can be combined using @@ -64,7 +66,7 @@ struct ZeroConstraint : public ParamConstraintFacade{ - ZeroConstraint() {description_ = "zero";} + ZeroConstraint() {this->description_ = "zero";} template bool operator()( DataType data ) const { return data == 0; @@ -72,7 +74,7 @@ struct NonZeroConstraint : public ParamConstraintFacad }; struct NonZeroConstraint : public ParamConstraintFacade{ - NonZeroConstraint() {description_ = "nonzero";} + NonZeroConstraint() {this->description_ = "nonzero";} template bool operator()( DataType data ) const { @@ -81,7 +83,7 @@ struct PositiveConstraint : public ParamConstraintFaca }; struct PositiveConstraint : public ParamConstraintFacade{ - PositiveConstraint() {description_ = "positive";} + PositiveConstraint() {this->description_ = "positive";} template bool operator()( DataType data ) const { @@ -90,7 +92,7 @@ struct NonPositiveConstraint : public ParamConstraintF }; struct NonPositiveConstraint : public ParamConstraintFacade{ - NonPositiveConstraint() {description_ = "nonpositive";} + NonPositiveConstraint() {this->description_ = "nonpositive";} template bool operator()( DataType data ) const { @@ -99,7 +101,7 @@ struct NegativeConstraint : public ParamConstraintFaca }; struct NegativeConstraint : public ParamConstraintFacade{ - NegativeConstraint() {description_ = "negative";} + NegativeConstraint() {this->description_ = "negative";} template bool operator()( DataType data ) const { @@ -108,7 +110,7 @@ struct NonNegativeConstraint : public ParamConstraintF }; struct NonNegativeConstraint : public ParamConstraintFacade{ - NonNegativeConstraint() {description_ = "nonnegative";} + NonNegativeConstraint() {this->description_ = "nonnegative";} template bool operator()( DataType data ) const { @@ -122,7 +124,7 @@ struct LessThanConstraint : public ParamConstraintFaca LessThanConstraint(T rhs) : rhs_(rhs){ std::stringstream iss; iss << "less than " << rhs; - description_ = iss.str(); + this->description_ = iss.str(); } template bool operator()( DataType data ) const { @@ -138,7 +140,7 @@ struct LessThanOrEqualToConstraint : public ParamConst LessThanOrEqualToConstraint(T rhs) : rhs_(rhs) { std::stringstream iss; iss << "less than or equal to" << rhs; - description_ = iss.str(); + this->description_ = iss.str(); } template @@ -156,7 +158,7 @@ struct EqualConstraint : public ParamConstraintFacade< EqualConstraint(T rhs) : rhs_(rhs){ std::stringstream iss; iss << "equal to" << rhs; - description_ = iss.str(); + this->description_ = iss.str(); } template @@ -169,18 +171,41 @@ struct EqualIgnoreCaseConstraint : public ParamConstra struct EqualIgnoreCaseConstraint : public ParamConstraintFacade { - EqualIgnoreCaseConstraint(std::string rhs) : rhs_(rhs){ + EqualIgnoreCaseConstraint(std::string rhs) : rhs_(oopse::toUpperCopy(rhs)){ std::stringstream iss; iss << "equal to (case insensitive) " << rhs; - description_ = iss.str(); + this->description_ = iss.str(); } bool operator()( std::string data ) const { - return data == rhs_; + return oopse::toUpperCopy(data) == rhs_; + } + + private: + std::string rhs_; +}; + +struct ContainsConstraint : public ParamConstraintFacade { + ContainsConstraint(std::string rhs) : rhs_(oopse::toUpperCopy(rhs)){ + std::stringstream iss; + iss << "contains " << rhs; + this->description_ = iss.str(); } + bool operator()( std::string data ) const { + oopse::StringTokenizer tokenizer(oopse::toUpperCopy(data), " ,;|\t\n\r"); + while (tokenizer.hasMoreTokens()) { + if (tokenizer.nextToken() == rhs_) { + return true; + } + } + + return false; + } + private: std::string rhs_; + }; template @@ -189,7 +214,7 @@ struct GreaterThanConstraint : public ParamConstraintF GreaterThanConstraint(T rhs) : rhs_(rhs){ std::stringstream iss; iss << "greater than" << rhs; - description_ = iss.str(); + this->description_ = iss.str(); } template bool operator()( DataType data ) const { @@ -205,7 +230,7 @@ struct GreaterThanOrEqualTo : public ParamConstraintFa GreaterThanOrEqualTo(T rhs) : rhs_(rhs){ std::stringstream iss; iss << "greater than or equal to" << rhs; - description_ = iss.str(); + this->description_ = iss.str(); } template bool operator()( DataType data ) const { @@ -223,7 +248,7 @@ struct AndParamConstraint: public ParamConstraintFacad AndParamConstraint( Cons1T cons1, Cons2T cons2 ) : cons1_(cons1), cons2_(cons2) { std::stringstream iss; iss << "(" << cons1_.getConstraintDescription() << " and " << cons2_.getConstraintDescription() << ")"; - description_ = iss.str(); + this->description_ = iss.str(); } template @@ -242,11 +267,10 @@ struct OrParamConstraint: public ParamConstraintFacade struct OrParamConstraint: public ParamConstraintFacade< OrParamConstraint > { public: - OrParamConstraint( Cons1T cons1, Cons2T cons2 ) : cons1_(cons1), cons2_(cons2) { std::stringstream iss; iss << cons1_.getConstraintDescription() << " or " << cons2_.getConstraintDescription() << ""; - description_ = iss.str(); + this->description_ = iss.str(); } template @@ -266,8 +290,8 @@ struct NotParamConstraint: public ParamConstraintFacad NotParamConstraint( ConsT cons) : cons_(cons) { std::stringstream iss; - iss << "(not" << cons1_.getConstraintDescription() << ")"; - description_ = iss.str(); + iss << "(not" << cons_.getConstraintDescription() << ")"; + this->description_ = iss.str(); } template