compare_versions: limit how many parts are checked.
This can be used to only check the first one or two parts of a version, to ensure only the major, or major+minor parts match.
This commit is contained in:
@@ -372,12 +372,16 @@ namespace simgear {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int compare_versions(const string& v1, const string& v2)
|
int compare_versions(const string& v1, const string& v2, int maxComponents)
|
||||||
{
|
{
|
||||||
vector<string> v1parts(split(v1, "."));
|
vector<string> v1parts(split(v1, "."));
|
||||||
vector<string> v2parts(split(v2, "."));
|
vector<string> v2parts(split(v2, "."));
|
||||||
|
|
||||||
int lastPart = std::min(v1parts.size(), v2parts.size());
|
int lastPart = std::min(v1parts.size(), v2parts.size());
|
||||||
|
if (maxComponents > 0) {
|
||||||
|
lastPart = std::min(lastPart, maxComponents);
|
||||||
|
}
|
||||||
|
|
||||||
for (int part=0; part < lastPart; ++part) {
|
for (int part=0; part < lastPart; ++part) {
|
||||||
int part1 = to_int(v1parts[part]);
|
int part1 = to_int(v1parts[part]);
|
||||||
int part2 = to_int(v2parts[part]);
|
int part2 = to_int(v2parts[part]);
|
||||||
|
|||||||
@@ -174,8 +174,10 @@ namespace simgear {
|
|||||||
* any number of terms are supported.
|
* any number of terms are supported.
|
||||||
* @return 0 if versions match, -ve number if v1 is lower, +ve if v1
|
* @return 0 if versions match, -ve number if v1 is lower, +ve if v1
|
||||||
* is greater
|
* is greater
|
||||||
|
* @param maxComponents is the maximum number of components to look at.
|
||||||
|
* This can be used to ignore (say) the patch level by setting it to 2
|
||||||
*/
|
*/
|
||||||
int compare_versions(const std::string& v1, const std::string& v2);
|
int compare_versions(const std::string& v1, const std::string& v2, int maxComponents = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a string to upper case.
|
* Convert a string to upper case.
|
||||||
|
|||||||
@@ -155,6 +155,11 @@ void test_compare_versions()
|
|||||||
|
|
||||||
// Since we compare numerically, leading zeros shouldn't matter
|
// Since we compare numerically, leading zeros shouldn't matter
|
||||||
SG_CHECK_EQUAL(strutils::compare_versions("0.06.7", "0.6.07"), 0);
|
SG_CHECK_EQUAL(strutils::compare_versions("0.06.7", "0.6.07"), 0);
|
||||||
|
|
||||||
|
|
||||||
|
SG_CHECK_EQUAL(strutils::compare_versions("10.6.7", "10.6.8", 2), 0);
|
||||||
|
SG_CHECK_GT(strutils::compare_versions("10.7.7", "10.6.8", 2), 0);
|
||||||
|
SG_CHECK_EQUAL(strutils::compare_versions("10.8.7", "10.6.8", 1), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_md5_hex()
|
void test_md5_hex()
|
||||||
|
|||||||
Reference in New Issue
Block a user