106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <QString>
 | 
						|
#include <QList>
 | 
						|
 | 
						|
class QUrl;
 | 
						|
 | 
						|
class Version
 | 
						|
{
 | 
						|
public:
 | 
						|
    Version(const QString &str);
 | 
						|
    Version() {}
 | 
						|
 | 
						|
    bool operator<(const Version &other) const;
 | 
						|
    bool operator<=(const Version &other) const;
 | 
						|
    bool operator>(const Version &other) const;
 | 
						|
    bool operator>=(const Version &other) const;
 | 
						|
    bool operator==(const Version &other) const;
 | 
						|
    bool operator!=(const Version &other) const;
 | 
						|
 | 
						|
    QString toString() const
 | 
						|
    {
 | 
						|
        return m_string;
 | 
						|
    }
 | 
						|
 | 
						|
private:
 | 
						|
    QString m_string;
 | 
						|
    struct Section
 | 
						|
    {
 | 
						|
        explicit Section(const QString &fullString)
 | 
						|
        {
 | 
						|
            m_fullString = fullString;
 | 
						|
            int cutoff = m_fullString.size();
 | 
						|
            for(int i = 0; i < m_fullString.size(); i++)
 | 
						|
            {
 | 
						|
                if(!m_fullString[i].isDigit())
 | 
						|
                {
 | 
						|
                    cutoff = i;
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            auto numPart = m_fullString.leftRef(cutoff);
 | 
						|
            if(numPart.size())
 | 
						|
            {
 | 
						|
                numValid = true;
 | 
						|
                m_numPart = numPart.toInt();
 | 
						|
            }
 | 
						|
            auto stringPart = m_fullString.midRef(cutoff);
 | 
						|
            if(stringPart.size())
 | 
						|
            {
 | 
						|
                m_stringPart = stringPart.toString();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        explicit Section() {}
 | 
						|
        bool numValid = false;
 | 
						|
        int m_numPart = 0;
 | 
						|
        QString m_stringPart;
 | 
						|
        QString m_fullString;
 | 
						|
 | 
						|
        inline bool operator!=(const Section &other) const
 | 
						|
        {
 | 
						|
            if(numValid && other.numValid)
 | 
						|
            {
 | 
						|
                return m_numPart != other.m_numPart || m_stringPart != other.m_stringPart;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                return m_fullString != other.m_fullString;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        inline bool operator<(const Section &other) const
 | 
						|
        {
 | 
						|
            if(numValid && other.numValid)
 | 
						|
            {
 | 
						|
                if(m_numPart < other.m_numPart)
 | 
						|
                    return true;
 | 
						|
                if(m_numPart == other.m_numPart && m_stringPart < other.m_stringPart)
 | 
						|
                    return true;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                return m_fullString < other.m_fullString;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        inline bool operator>(const Section &other) const
 | 
						|
        {
 | 
						|
            if(numValid && other.numValid)
 | 
						|
            {
 | 
						|
                if(m_numPart > other.m_numPart)
 | 
						|
                    return true;
 | 
						|
                if(m_numPart == other.m_numPart && m_stringPart > other.m_stringPart)
 | 
						|
                    return true;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                return m_fullString > other.m_fullString;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    };
 | 
						|
    QList<Section> m_sections;
 | 
						|
 | 
						|
    void parse();
 | 
						|
};
 |