Implement methods to modify version object in various ways (#2)
* Initial implementation of non-mutable setting and resetting version components. * Document new functionality in source code and update README.
This commit is contained in:
+115
-41
@@ -45,66 +45,140 @@ namespace version {
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
Basic_version<Parser, Comparator>::Basic_version(Parser p, Comparator c)
|
||||
: parser_(p), comparator_(c), ver_(parser_.parse("0.0.0")) {}
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier>::Basic_version(Parser p, Comparator c, Modifier m)
|
||||
: parser_(p), comparator_(c), modifier_(m), ver_(parser_.parse("0.0.0")) {}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
Basic_version<Parser, Comparator>::Basic_version(const std::string& v, Parser p, Comparator c)
|
||||
: parser_(p), comparator_(c), ver_(parser_.parse(v)) {}
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier>::Basic_version(const std::string& v, Parser p, Comparator c, Modifier m)
|
||||
: parser_(p), comparator_(c), modifier_(m), ver_(parser_.parse(v)) {}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
Basic_version<Parser, Comparator>::Basic_version(const Basic_version<Parser, Comparator>&) = default;
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier>::Basic_version(const Version_data& v, Parser p, Comparator c, Modifier m)
|
||||
: parser_(p), comparator_(c), modifier_(m), ver_(v) {}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
Basic_version<Parser, Comparator>& Basic_version<Parser, Comparator>::operator=(
|
||||
const Basic_version<Parser, Comparator>&) = default;
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier>::Basic_version(const Basic_version<Parser, Comparator, Modifier>&) = default;
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
int Basic_version<Parser, Comparator>::major() const {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier>& Basic_version<Parser, Comparator, Modifier>::operator=(
|
||||
const Basic_version<Parser, Comparator, Modifier>&) = default;
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
int Basic_version<Parser, Comparator, Modifier>::major() const {
|
||||
return ver_.major;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
int Basic_version<Parser, Comparator>::minor() const {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
int Basic_version<Parser, Comparator, Modifier>::minor() const {
|
||||
return ver_.minor;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
int Basic_version<Parser, Comparator>::patch() const {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
int Basic_version<Parser, Comparator, Modifier>::patch() const {
|
||||
return ver_.patch;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
const std::string Basic_version<Parser, Comparator>::prerelease() const {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
const std::string Basic_version<Parser, Comparator, Modifier>::prerelease() const {
|
||||
std::stringstream ss;
|
||||
splice(ss, ver_.prerelease_ids, ".", [](const auto& id) { return id.first;});
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
const std::string Basic_version<Parser, Comparator>::build() const {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
const std::string Basic_version<Parser, Comparator, Modifier>::build() const {
|
||||
std::stringstream ss;
|
||||
splice(ss, ver_.build_ids, ".", [](const auto& id) { return id;});
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::set_major(const int m) const {
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.set_major(ver_, m), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
bool operator<(const Basic_version<Parser, Comparator>& l,
|
||||
const Basic_version<Parser, Comparator>& r) {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::set_minor(const int m) const {
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.set_minor(ver_, m), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::set_patch(const int p) const {
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.set_patch(ver_, p), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::set_prerelease(const std::string& pr) const {
|
||||
auto vd = parser_.parse("0.0.0-" + pr);
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.set_prerelease(ver_, vd.prerelease_ids), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::set_build(const std::string& b) const {
|
||||
auto vd = parser_.parse("0.0.0+" + b);
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.set_build(ver_, vd.build_ids), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::reset_major(const int m) const {
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.reset_major(ver_, m), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::reset_minor(const int m) const {
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.reset_minor(ver_, m), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::reset_patch(const int p) const {
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.reset_patch(ver_, p), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::reset_prerelease(const std::string& pr) const {
|
||||
std::string ver = "0.0.0-" + pr;
|
||||
auto vd = parser_.parse(ver);
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.reset_prerelease(ver_, vd.prerelease_ids), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::reset_build(const std::string& b) const {
|
||||
std::string ver = "0.0.0+" + b;
|
||||
auto vd = parser_.parse(ver);
|
||||
return Basic_version<Parser, Comparator, Modifier>(modifier_.reset_build(ver_, vd.build_ids), parser_, comparator_, modifier_);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::inc_major(const int i) const {
|
||||
return reset_major(ver_.major + i);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::inc_minor(const int i) const {
|
||||
return reset_minor(ver_.minor + i);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
Basic_version<Parser, Comparator, Modifier> Basic_version<Parser, Comparator, Modifier>::inc_patch(const int i) const {
|
||||
return reset_patch(ver_.patch + i);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
bool operator<(const Basic_version<Parser, Comparator, Modifier>& l,
|
||||
const Basic_version<Parser, Comparator, Modifier>& r) {
|
||||
return l.comparator_.compare(l.ver_, r.ver_) == -1;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
bool operator==(const Basic_version<Parser, Comparator>& l,
|
||||
const Basic_version<Parser, Comparator>& r) {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
bool operator==(const Basic_version<Parser, Comparator, Modifier>& l,
|
||||
const Basic_version<Parser, Comparator, Modifier>& r) {
|
||||
return l.comparator_.compare(l.ver_, r.ver_) == 0;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
std::ostream& operator<<(std::ostream& os,
|
||||
const Basic_version<Parser, Comparator>& v) {
|
||||
const Basic_version<Parser, Comparator, Modifier>& v) {
|
||||
os << v.ver_.major << "." << v.ver_.minor << "." << v.ver_.patch;
|
||||
std::string prl = v.prerelease();
|
||||
if (!prl.empty()) {
|
||||
@@ -117,27 +191,27 @@ namespace version {
|
||||
return os;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
inline bool operator!=(const Basic_version<Parser, Comparator>& l,
|
||||
const Basic_version<Parser, Comparator>& r) {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
inline bool operator!=(const Basic_version<Parser, Comparator, Modifier>& l,
|
||||
const Basic_version<Parser, Comparator, Modifier>& r) {
|
||||
return !(l == r);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
inline bool operator>(const Basic_version<Parser, Comparator>& l,
|
||||
const Basic_version<Parser, Comparator>& r) {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
inline bool operator>(const Basic_version<Parser, Comparator, Modifier>& l,
|
||||
const Basic_version<Parser, Comparator, Modifier>& r) {
|
||||
return r < l;
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
inline bool operator>=(const Basic_version<Parser, Comparator>& l,
|
||||
const Basic_version<Parser, Comparator>& r) {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
inline bool operator>=(const Basic_version<Parser, Comparator, Modifier>& l,
|
||||
const Basic_version<Parser, Comparator, Modifier>& r) {
|
||||
return !(l < r);
|
||||
}
|
||||
|
||||
template<typename Parser, typename Comparator>
|
||||
inline bool operator<=(const Basic_version<Parser, Comparator>& l,
|
||||
const Basic_version<Parser, Comparator>& r) {
|
||||
template<typename Parser, typename Comparator, typename Modifier>
|
||||
inline bool operator<=(const Basic_version<Parser, Comparator, Modifier>& l,
|
||||
const Basic_version<Parser, Comparator, Modifier>& r) {
|
||||
return !(l > r);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user