Parsing the version files, part II

This commit is contained in:
Petr Mrázek
2013-07-24 23:44:00 +02:00
parent 18853ca3fa
commit 97cf08f964
5 changed files with 246 additions and 34 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include <QString>
#include <QStringList>
class Library;
class FullVersion
{
@@ -40,7 +41,7 @@ public:
QString mainClass;
// the list of libs. just the names for now. expand to full-blown strutures!
QStringList libraries;
QList<QSharedPointer<Library> > libraries;
// is this actually a legacy version? if so, none of the other stuff here will be ever used.
// added by FullVersionFactory

View File

@@ -15,4 +15,121 @@
#pragma once
#include <QtCore>
class Library;
enum RuleAction
{
Allow,
Disallow,
Defer
};
RuleAction RuleAction_fromString(QString);
class Rule
{
protected:
RuleAction m_result;
virtual bool applies(Library * parent) = 0;
public:
Rule(RuleAction result)
:m_result(result) {}
virtual ~Rule(){};
RuleAction apply(Library * parent)
{
if(applies(parent))
return m_result;
else
return Defer;
};
};
enum OpSys
{
Os_Windows,
Os_Linux,
Os_OSX,
Os_Other
};
OpSys OpSys_fromString(QString);
#ifdef Q_OS_MAC
#define currentSystem Os_OSX
#endif
#ifdef Q_OS_LINUX
#define currentSystem Os_Linux
#endif
#ifdef Q_OS_WIN32
#define currentSystem Os_Windows
#endif
#ifndef currentSystem
#define currentSystem Os_Other
#endif
class OsRule : public Rule
{
private:
// the OS
OpSys m_system;
// the OS version regexp
QString m_version_regexp;
protected:
virtual bool applies ( Library* )
{
return (m_system == currentSystem);
}
public:
OsRule(RuleAction result, OpSys system, QString version_regexp)
: Rule(result), m_system(system), m_version_regexp(version_regexp) {}
};
class ImplicitRule : public Rule
{
protected:
virtual bool applies ( Library* )
{
return true;
}
public:
ImplicitRule(RuleAction result)
: Rule(result) {}
};
class Library
{
public:
QString base_url;
QString name;
QList<QSharedPointer<Rule> > rules;
QMap<OpSys, QString> natives;
QStringList extract_excludes;
void AddRule(RuleAction result)
{
rules.append(QSharedPointer<Rule>(new ImplicitRule(result)));
}
void AddRule(RuleAction result, OpSys system, QString version_regexp)
{
rules.append(QSharedPointer<Rule>(new OsRule(result, system, version_regexp)));
}
bool applies()
{
if(rules.empty())
return true;
RuleAction result = Disallow;
for(auto rule: rules)
{
RuleAction temp = rule->apply( this );
if(temp != Defer)
result = temp;
}
return result == Allow;
}
};