diff options
Diffstat (limited to 'src/versionstr.cc')
| -rw-r--r-- | src/versionstr.cc | 153 | 
1 files changed, 91 insertions, 62 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];  } | 
