From 21c532adc0ced20a321db865f86c8b1ae1053456 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Fri, 9 Jan 2015 16:25:07 -0500 Subject: [PATCH] Add internal support for major/minor/build comparator --- include/ProjectVersion.h | 24 +++++++++++++++--------- src/core/ProjectVersion.cpp | 33 ++++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index cb2e30de2..7ee861892 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -2,6 +2,7 @@ * ProjectVersion.h - version compared in import upgrades * * Copyright (c) 2007 Javier Serrano Polo + * Copyright (c) 2015 Tres Finocchiaro * * This file is part of LMMS - http://lmms.io * @@ -28,34 +29,39 @@ #include +enum CompareType { Major, Minor, Release, Build }; + class ProjectVersion : public QString { public: - ProjectVersion(const QString & s) : + ProjectVersion(const QString & s, const CompareType c = CompareType::Build) : QString(s), m_major(section( '.', 0, 0 ).toInt()) , m_minor(section( '.', 1, 1 ).toInt()) , m_release(section( '.', 2 ).section( '-', 0, 0 ).toInt()) , - m_build(section( '.', 2 ).section( '-', 1 )) + m_build(section( '.', 2 ).section( '-', 1 )), + m_compareType(c) { } - static int compare(const ProjectVersion & v1, const ProjectVersion & v2); - const int majorVersion() const { return m_major; } - const int minorVersion() const { return m_minor; } - const int releaseVersion() const { return m_release; } - const QString buildVersion() const { return m_build; } + static int compare(const ProjectVersion & v1, const ProjectVersion & v2); + + const int getMajor() const { return m_major; } + const int getMinor() const { return m_minor; } + const int getRelease() const { return m_release; } + const QString getBuild() const { return m_build; } + const CompareType getCompareType() const { return m_compareType; } + private: const int m_major; const int m_minor; const int m_release; const QString m_build; + const CompareType m_compareType; } ; - - inline bool operator<( const ProjectVersion & v1, const char * str ) { return ProjectVersion::compare( v1, ProjectVersion( str ) ) < 0; diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 4e7ed5a5d..9caf25472 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -3,6 +3,7 @@ * * Copyright (c) 2007 Javier Serrano Polo * Copyright (c) 2008 Tobias Doerffel + * Copyright (c) 2015 Tres Finocchiaro * * This file is part of LMMS - http://lmms.io * @@ -31,32 +32,46 @@ int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2) { - if(v1.majorVersion() != v2.majorVersion()) + if(v1.getMajor() != v2.getMajor()) { - return v1.majorVersion() - v2.majorVersion(); + return v1.getMajor() - v2.getMajor(); + } + + // return prematurely for Major comparison + if(v1.getCompareType() == CompareType::Major || + v1.getCompareType() == CompareType::Major) + { + return 0; } - if(v1.minorVersion() != v2.minorVersion()) + if(v1.getMinor() != v2.getMinor()) { - return v1.minorVersion() - v2.minorVersion(); + return v1.getMinor() - v2.getMinor(); } - if(v1.releaseVersion() != v2.releaseVersion()) + // return prematurely for Minor comparison + if(v1.getCompareType() == CompareType::Minor || + v1.getCompareType() == CompareType::Minor) + + if(v1.getRelease() != v2.getRelease()) { - return v1.releaseVersion() - v2.releaseVersion(); + return v1.getRelease() - v2.getRelease(); } + if(v1.getCompareType() == CompareType::Build || + v1.getCompareType() == CompareType::Build) + // make sure 0.x.y > 0.x.y-patch - if(v1.buildVersion().isEmpty()) + if(v1.getBuild().isEmpty()) { return 1; } - if(v2.buildVersion().isEmpty()) + if(v2.getBuild().isEmpty()) { return -1; } - return QString::compare(v1.buildVersion(), v2.buildVersion()); + return QString::compare(v1.getBuild(), v2.getBuild()); }