Add copy c'tors and assignment operators; Change numeric prerelease identifier comparison to use long longs instead of ints.

This commit is contained in:
Marko Zivanovic
2015-10-13 12:10:43 +02:00
parent bb377082f2
commit 522e8b484b
5 changed files with 32 additions and 7 deletions
+3
View File
@@ -41,6 +41,9 @@ namespace version {
/// Concrete version class that binds all semver 2.0.0 functionality together. /// Concrete version class that binds all semver 2.0.0 functionality together.
class Semver200_version : public Basic_version<Semver200_parser, Semver200_comparator> { class Semver200_version : public Basic_version<Semver200_parser, Semver200_comparator> {
public: public:
Semver200_version()
: Basic_version{ Semver200_parser(), Semver200_comparator() } {}
Semver200_version(const std::string& v) Semver200_version(const std::string& v)
: Basic_version{ v, Semver200_parser(), Semver200_comparator() } {} : Basic_version{ v, Semver200_parser(), Semver200_comparator() } {}
}; };
+11 -3
View File
@@ -117,9 +117,17 @@ namespace version {
template<typename Parser, typename Comparator> template<typename Parser, typename Comparator>
class Basic_version { class Basic_version {
public: public:
/// Construct Basic_version object using P to parse default ("0.0.0") version string and C for comparison.
Basic_version(Parser p, Comparator c);
/// Construct Basic_version object using P to parse version string and C for comparison. /// Construct Basic_version object using P to parse version string and C for comparison.
Basic_version(const std::string& v, Parser p, Comparator c) Basic_version(const std::string& v, Parser p, Comparator c);
: parser_(p), comparator_(c), ver_(parser_.parse(v)) {};
/// Construct Basic_version by copying data from another one.
Basic_version(const Basic_version&);
/// Copy version data from another Basic_version to this one.
Basic_version& operator=(const Basic_version&);
const int major() const; const int major() const;
const int minor() const; const int minor() const;
@@ -134,7 +142,7 @@ namespace version {
private: private:
Parser parser_; Parser parser_;
Comparator comparator_; Comparator comparator_;
const Version_data ver_; Version_data ver_;
}; };
} }
+14
View File
@@ -44,6 +44,20 @@ namespace version {
} }
} }
template<typename P, typename C>
Basic_version<P, C>::Basic_version(P p, C c)
: parser_(p), comparator_(c), ver_(parser_.parse("0.0.0")) {};
template<typename P, typename C>
Basic_version<P, C>::Basic_version(const std::string& v, P p, C c)
: parser_(p), comparator_(c), ver_(parser_.parse(v)) {};
template<typename P, typename C>
Basic_version<P, C>::Basic_version(const Basic_version<P, C>&) = default;
template<typename P, typename C>
Basic_version<P, C>& Basic_version<P, C>::operator=(const Basic_version<P, C>&) = default;
template<typename P, typename C> template<typename P, typename C>
const int Basic_version<P, C>::major() const { const int Basic_version<P, C>::major() const {
return ver_.major; return ver_.major;
+3 -3
View File
@@ -25,7 +25,7 @@ SOFTWARE.
#include <algorithm> #include <algorithm>
#include <functional> #include <functional>
#include <map> #include <map>
#include "semver200.h" #include "common/semver200.h"
using namespace std; using namespace std;
@@ -56,8 +56,8 @@ namespace {
// Compare numeric prerelease identifiers. // Compare numeric prerelease identifiers.
inline int cmp_num_prerel_ids(const string& l, const string& r) { inline int cmp_num_prerel_ids(const string& l, const string& r) {
int li = stoi(l); long long li = stoll(l);
int ri = stoi(r); long long ri = stoll(r);
if (li == ri) return 0; if (li == ri) return 0;
return li > ri ? 1 : -1; return li > ri ? 1 : -1;
} }
+1 -1
View File
@@ -24,7 +24,7 @@ SOFTWARE.
#include <functional> #include <functional>
#include <map> #include <map>
#include "semver200.h" #include "common/semver200.h"
using namespace std; using namespace std;