[PATCH setup 10/15] Change PackageSpecification::_operator to an enum
Jon Turney
jon.turney@dronecode.org.uk
Tue May 16 11:58:00 GMT 2017
---
PackageSpecification.cc | 71 ++++++++++++++++++++++---------------------------
PackageSpecification.h | 46 +++++++++++---------------------
2 files changed, 48 insertions(+), 69 deletions(-)
diff --git a/PackageSpecification.cc b/PackageSpecification.cc
index a0818b3..f59b11b 100644
--- a/PackageSpecification.cc
+++ b/PackageSpecification.cc
@@ -18,7 +18,7 @@
#include "package_version.h"
PackageSpecification::PackageSpecification (const std::string& packageName)
- : _packageName (packageName) , _operator (0), _version ()
+ : _packageName (packageName) , _operator (Equals), _version ()
{
}
@@ -29,9 +29,9 @@ PackageSpecification::packageName () const
}
void
-PackageSpecification::setOperator (_operators const &anOperator)
+PackageSpecification::setOperator (_operators anOperator)
{
- _operator = &anOperator;
+ _operator = anOperator;
}
void
@@ -45,9 +45,28 @@ PackageSpecification::satisfies (packageversion const &aPackage) const
{
if (casecompare(_packageName, aPackage.Name()) != 0)
return false;
- if (_operator && _version.size()
- && !_operator->satisfies (aPackage.Canonical_version (), _version))
- return false;
+
+ // The default values of _operator = Equals and _version is an empty-string
+ // match any version
+ if (_version.size())
+ {
+ int comparison = casecompare(aPackage.Canonical_version (), _version);
+ switch (_operator)
+ {
+ case Equals:
+ return (comparison == 0);
+ case LessThan:
+ return (comparison < 0);
+ case MoreThan:
+ return (comparison > 0);
+ case LessThanEquals:
+ return (comparison <= 0);
+ case MoreThanEquals:
+ return (comparison >= 0);
+ default:
+ return false;
+ }
+ }
return true;
}
@@ -69,52 +88,26 @@ operator << (std::ostream &os, PackageSpecification const &spec)
{
os << spec._packageName;
if (spec._operator)
- os << " " << spec._operator->caption() << " " << spec._version;
+ os << " " << PackageSpecification::caption(spec._operator) << " " << spec._version;
return os;
}
-const PackageSpecification::_operators PackageSpecification::Equals(0);
-const PackageSpecification::_operators PackageSpecification::LessThan(1);
-const PackageSpecification::_operators PackageSpecification::MoreThan(2);
-const PackageSpecification::_operators PackageSpecification::LessThanEquals(3);
-const PackageSpecification::_operators PackageSpecification::MoreThanEquals(4);
-
char const *
-PackageSpecification::_operators::caption () const
+PackageSpecification::caption (_operators _value)
{
switch (_value)
{
- case 0:
+ case Equals:
return "==";
- case 1:
+ case LessThan:
return "<";
- case 2:
+ case MoreThan:
return ">";
- case 3:
+ case LessThanEquals:
return "<=";
- case 4:
+ case MoreThanEquals:
return ">=";
}
// Pacify GCC: (all case options are checked above)
return "Unknown operator";
}
-
-bool
-PackageSpecification::_operators::satisfies (const std::string& lhs,
- const std::string& rhs) const
-{
- switch (_value)
- {
- case 0:
- return casecompare(lhs, rhs) == 0;
- case 1:
- return casecompare(lhs, rhs) < 0;
- case 2:
- return casecompare(lhs, rhs) > 0;
- case 3:
- return casecompare(lhs, rhs) <= 0;
- case 4:
- return casecompare(lhs, rhs) >= 0;
- }
- return false;
-}
diff --git a/PackageSpecification.h b/PackageSpecification.h
index 8d622f3..a26431a 100644
--- a/PackageSpecification.h
+++ b/PackageSpecification.h
@@ -25,14 +25,21 @@ class packageversion;
class PackageSpecification
{
public:
- PackageSpecification () : _packageName (), _operator(0) {}
+ PackageSpecification () : _packageName (), _operator(Equals) {}
PackageSpecification (const std::string& packageName);
~PackageSpecification () {}
- class _operators;
-
- const std::string& packageName() const;
- void setOperator (_operators const &);
+ enum _operators
+ {
+ Equals,
+ LessThan,
+ MoreThan,
+ LessThanEquals,
+ MoreThanEquals,
+ };
+
+ const std::string& packageName() const;
+ void setOperator (_operators);
void setVersion (const std::string& );
bool satisfies (packageversion const &) const;
@@ -42,33 +49,12 @@ public:
friend std::ostream &operator << (std::ostream &, PackageSpecification const &);
- class _operators
- {
- public:
- _operators ():_value (0) {};
- _operators (int aInt) {
- _value = aInt;
- if (_value < 0 || _value > 4)
- _value = 0;
- }
- _operators & operator ++ ();
- bool operator == (_operators const &rhs) { return _value == rhs._value; }
- bool operator != (_operators const &rhs) { return _value != rhs._value; }
- const char *caption () const;
- bool satisfies (const std::string& lhs, const std::string& rhs) const;
- private:
- int _value;
- };
- static const _operators Equals;
- static const _operators LessThan;
- static const _operators MoreThan;
- static const _operators LessThanEquals;
- static const _operators MoreThanEquals;
-
private:
+ static char const * caption (_operators _value);
+
std::string _packageName; /* foobar */
- _operators const * _operator; /* >= */
- std::string _version; /* 1.20 */
+ _operators _operator; /* >= */
+ std::string _version; /* 1.20 */
};
std::ostream &
--
2.12.3
More information about the Cygwin-apps
mailing list