diff options
author | Christian Glöckner <cgloeckner@freenet.de> | 2016-03-29 17:51:37 +0200 |
---|---|---|
committer | André Nusser <andre.nusser@googlemail.com> | 2016-03-31 17:49:56 +0200 |
commit | 9b5dae389051c8c9ea96c1f79b487169d19b46d8 (patch) | |
tree | 16ad2a4ab696e4f08048065dc977069d1351aa1c | |
parent | 68dc4b912f0a950a9db4987432c559dd1b0a0ebf (diff) |
Refactored class VersionStr
-rw-r--r-- | src/versionstr.cc | 153 | ||||
-rw-r--r-- | src/versionstr.h | 114 |
2 files changed, 148 insertions, 119 deletions
diff --git a/src/versionstr.cc b/src/versionstr.cc index 48764ba..604d7c1 100644 --- a/src/versionstr.cc +++ b/src/versionstr.cc @@ -31,7 +31,8 @@ #include <stdlib.h> #include <stdio.h> -// Workaround - major, minor and patch are defined as macros when using _GNU_SOURCES +// Workaround - major, minor and patch are defined as macros when using +// _GNU_SOURCES #ifdef major #undef major #endif @@ -42,110 +43,138 @@ #undef patch #endif -VersionStr::VersionStr(std::string v) throw(const char *) +VersionStr::VersionStr(const std::string& v) throw(const char*) { - memset(version, 0, sizeof(version)); - set(v); + memset(version, 0, sizeof(version)); + set(v); } VersionStr::VersionStr(size_t major, size_t minor, size_t patch) { - version[0] = major; - version[1] = minor; - version[2] = patch; + version[0] = major; + version[1] = minor; + version[2] = patch; } -void VersionStr::set(std::string v) throw(const char *) +void VersionStr::set(const std::string& v) throw(const char*) { - std::string num; - size_t idx = 0; - for(size_t i = 0; i < v.length(); i++) { - if(v[i] == '.') { - if(idx > 2) throw "Version string is too long."; - version[idx] = atoi(num.c_str()); - idx++; - num = ""; - } else if(v[i] >= '0' && v[i] <= '9') { - num.append(1, v[i]); - } else { - throw "Version string contains illegal character."; - } - } - if(idx > 2) throw "Version string is too long."; - version[idx] = atoi(num.c_str()); + std::string num; + size_t idx = 0; + for(size_t i = 0; i < v.length(); i++) + { + if(v[i] == '.') + { + if(idx > 2) + { + throw "Version string is too long."; + } + version[idx] = atoi(num.c_str()); + idx++; + num = ""; + } + else if(v[i] >= '0' && v[i] <= '9') + { + num.append(1, v[i]); + } + else + { + throw "Version string contains illegal character."; + } + } + if(idx > 2) + { + throw "Version string is too long."; + } + version[idx] = atoi(num.c_str()); } VersionStr::operator std::string() const { - std::string v; - char buf[64]; - if(patch()) { - sprintf(buf, "%d.%d.%d", (int)major(), (int)minor(), (int)patch()); - } else { - sprintf(buf, "%d.%d", (int)major(), (int)minor()); - } - v = buf; - return v; + std::string v; + char buf[64]; + if(patch()) + { + sprintf(buf, "%d.%d.%d", (int)major(), (int)minor(), (int)patch()); + } + else + { + sprintf(buf, "%d.%d", (int)major(), (int)minor()); + } + v = buf; + return v; } - -void VersionStr::operator=(std::string v) throw(const char *) + +void VersionStr::operator=(const std::string& v) throw(const char*) { - set(v); + set(v); } // return a - b simplified as -1, 0 or 1 -static int vdiff(const VersionStr &a, const VersionStr &b) +static int vdiff(const VersionStr& a, const VersionStr& b) { - if(a.major() < b.major()) return -1; - if(a.major() > b.major()) return 1; - if(a.minor() < b.minor()) return -1; - if(a.minor() > b.minor()) return 1; - if(a.patch() < b.patch()) return -1; - if(a.patch() > b.patch()) return 1; - return 0; + if(a.major() < b.major()) + { + return -1; + } + if(a.major() > b.major()) + { + return 1; + } + if(a.minor() < b.minor()) + { + return -1; + } + if(a.minor() > b.minor()) + { + return 1; + } + if(a.patch() < b.patch()) + { + return -1; + } + if(a.patch() > b.patch()) + { + return 1; + } + return 0; } -bool VersionStr::operator<(const VersionStr &other) const +bool VersionStr::operator<(const VersionStr& other) const { - if(vdiff(*this, other) == -1) return true; - return false; + return vdiff(*this, other) == -1; } -bool VersionStr::operator>(const VersionStr &other) const +bool VersionStr::operator>(const VersionStr& other) const { - if(vdiff(*this, other) == 1) return true; - return false; + return vdiff(*this, other) == 1; } -bool VersionStr::operator==(const VersionStr &other) const +bool VersionStr::operator==(const VersionStr& other) const { - if(vdiff(*this, other) == 0) return true; - return false; + return vdiff(*this, other) == 0; } -bool VersionStr::operator<=(const VersionStr &other) const +bool VersionStr::operator<=(const VersionStr& other) const { - if(vdiff(*this, other) != 1) return true; - return false; + return vdiff(*this, other) != 1; } -bool VersionStr::operator>=(const VersionStr &other) const +bool VersionStr::operator>=(const VersionStr& other) const { - if(vdiff(*this, other) != -1) return true; - return false; + return vdiff(*this, other) != -1; } size_t VersionStr::major() const { - return version[0]; + return version[0]; } size_t VersionStr::minor() const { - return version[1]; + return version[1]; } size_t VersionStr::patch() const { - return version[2]; + return version[2]; } diff --git a/src/versionstr.h b/src/versionstr.h index 9cdd056..f168332 100644 --- a/src/versionstr.h +++ b/src/versionstr.h @@ -25,12 +25,12 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __PRACRO_VERSIONSTR_H__ -#define __PRACRO_VERSIONSTR_H__ +#pragma once #include <string> -// Workaround - major, minor and patch are defined as macros when using _GNU_SOURCES +// Workaround - major, minor and patch are defined as macros when using +// _GNU_SOURCES #ifdef major #undef major #endif @@ -43,70 +43,70 @@ /** * VersionStr class. - * It hold a version number and is capable of correct sorting, as well as string + * It hold a version number and is capable of correct sorting, as well as string * conversion both ways. */ -class VersionStr { +class VersionStr +{ public: - /** - * Constructor. - * Throws an exeption if the string does not parse. - * @param v A std::string containing a version string on the form a.b or a.b.c - */ - VersionStr(std::string v) throw(const char *); + /** + * Constructor. + * Throws an exeption if the string does not parse. + * @param v A std::string containing a version string on the form a.b or + * a.b.c + */ + VersionStr(const std::string& v) throw(const char*); - /** - * Constructor. - * @param major A size_t containing the major version number. - * @param minor A size_t containing the minor version number. - * @param patch A size_t containing the patch level. - */ - VersionStr(size_t major = 0, size_t minor = 0, size_t patch = 0); + /** + * Constructor. + * @param major A size_t containing the major version number. + * @param minor A size_t containing the minor version number. + * @param patch A size_t containing the patch level. + */ + VersionStr(size_t major = 0, size_t minor = 0, size_t patch = 0); - /** - * Typecast to std::string operator. - * It simply converts the version numbers into a string of the form major.minor - * (if patch i 0) or major.minor.patch - */ - operator std::string() const; + /** + * Typecast to std::string operator. + * It simply converts the version numbers into a string of the form + * major.minor + * (if patch i 0) or major.minor.patch + */ + operator std::string() const; - /** - * Assignment from std::string operator. - * Same as in the VersionStr(std::string v) constructor. - * Throws an exeption if the string does not parse. - */ - void operator=(std::string v) throw(const char *); + /** + * Assignment from std::string operator. + * Same as in the VersionStr(std::string v) constructor. + * Throws an exeption if the string does not parse. + */ + void operator=(const std::string& v) throw(const char*); - /** - * Comparison operator. - * The version objects are sorted according to their major, minor and patch - * level numbers. - */ - bool operator<(const VersionStr &other) const; - bool operator==(const VersionStr &other) const; - bool operator>(const VersionStr &other) const; - bool operator>=(const VersionStr &other) const; - bool operator<=(const VersionStr &other) const; + /** + * Comparison operator. + * The version objects are sorted according to their major, minor and patch + * level numbers. + */ + bool operator<(const VersionStr& other) const; + bool operator==(const VersionStr& other) const; + bool operator>(const VersionStr& other) const; + bool operator>=(const VersionStr& other) const; + bool operator<=(const VersionStr& other) const; + /** + * @return Major version number. + */ + size_t major() const; - /** - * @return Major version number. - */ - size_t major() const; + /** + * @return Minor version number. + */ + size_t minor() const; - /** - * @return Minor version number. - */ - size_t minor() const; - - /** - * @return Patch level. - */ - size_t patch() const; + /** + * @return Patch level. + */ + size_t patch() const; private: - void set(std::string v) throw(const char *); - size_t version[3]; + void set(const std::string& v) throw(const char*); + size_t version[3]; }; - -#endif/*__PRACRO_VERSIONSTR_H__*/ |