From 522e8b484b2afff97b3cbdcf0f65520221ab6a0b Mon Sep 17 00:00:00 2001 From: Marko Zivanovic Date: Tue, 13 Oct 2015 12:10:43 +0200 Subject: [PATCH] Add copy c'tors and assignment operators; Change numeric prerelease identifier comparison to use long longs instead of ints. --- include/semver200.h | 3 +++ include/version.h | 14 +++++++++++--- include/version.inl | 14 ++++++++++++++ src/Semver200_comparator.cpp | 6 +++--- src/Semver200_parser.cpp | 2 +- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/include/semver200.h b/include/semver200.h index e889cc3..7f5bbc4 100644 --- a/include/semver200.h +++ b/include/semver200.h @@ -41,6 +41,9 @@ namespace version { /// Concrete version class that binds all semver 2.0.0 functionality together. class Semver200_version : public Basic_version { public: + Semver200_version() + : Basic_version{ Semver200_parser(), Semver200_comparator() } {} + Semver200_version(const std::string& v) : Basic_version{ v, Semver200_parser(), Semver200_comparator() } {} }; diff --git a/include/version.h b/include/version.h index 6cadf5c..765bc8e 100644 --- a/include/version.h +++ b/include/version.h @@ -117,9 +117,17 @@ namespace version { template class Basic_version { 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. - Basic_version(const std::string& v, Parser p, Comparator c) - : parser_(p), comparator_(c), ver_(parser_.parse(v)) {}; + Basic_version(const std::string& v, Parser p, Comparator c); + + /// 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 minor() const; @@ -134,7 +142,7 @@ namespace version { private: Parser parser_; Comparator comparator_; - const Version_data ver_; + Version_data ver_; }; } diff --git a/include/version.inl b/include/version.inl index d70d242..30b083d 100644 --- a/include/version.inl +++ b/include/version.inl @@ -44,6 +44,20 @@ namespace version { } } + template + Basic_version::Basic_version(P p, C c) + : parser_(p), comparator_(c), ver_(parser_.parse("0.0.0")) {}; + + template + Basic_version::Basic_version(const std::string& v, P p, C c) + : parser_(p), comparator_(c), ver_(parser_.parse(v)) {}; + + template + Basic_version::Basic_version(const Basic_version&) = default; + + template + Basic_version& Basic_version::operator=(const Basic_version&) = default; + template const int Basic_version::major() const { return ver_.major; diff --git a/src/Semver200_comparator.cpp b/src/Semver200_comparator.cpp index 2a980ef..0f73d90 100644 --- a/src/Semver200_comparator.cpp +++ b/src/Semver200_comparator.cpp @@ -25,7 +25,7 @@ SOFTWARE. #include #include #include -#include "semver200.h" +#include "common/semver200.h" using namespace std; @@ -56,8 +56,8 @@ namespace { // Compare numeric prerelease identifiers. inline int cmp_num_prerel_ids(const string& l, const string& r) { - int li = stoi(l); - int ri = stoi(r); + long long li = stoll(l); + long long ri = stoll(r); if (li == ri) return 0; return li > ri ? 1 : -1; } diff --git a/src/Semver200_parser.cpp b/src/Semver200_parser.cpp index 2426e56..14af444 100644 --- a/src/Semver200_parser.cpp +++ b/src/Semver200_parser.cpp @@ -24,7 +24,7 @@ SOFTWARE. #include #include -#include "semver200.h" +#include "common/semver200.h" using namespace std;