summaryrefslogtreecommitdiffstats
path: root/util/glgen/specparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/glgen/specparser.h')
-rw-r--r--util/glgen/specparser.h90
1 files changed, 71 insertions, 19 deletions
diff --git a/util/glgen/specparser.h b/util/glgen/specparser.h
index 99e33b66e9..4fedc84d9c 100644
--- a/util/glgen/specparser.h
+++ b/util/glgen/specparser.h
@@ -38,6 +38,7 @@
#include <QVariant>
class QTextStream;
+class QXmlStreamReader;
struct Version {
int major;
@@ -49,6 +50,11 @@ inline bool operator == (const Version &lhs, const Version &rhs)
return (lhs.major == rhs.major && lhs.minor == rhs.minor);
}
+inline bool operator != (const Version &lhs, const Version &rhs)
+{
+ return !(lhs == rhs);
+}
+
inline bool operator < (const Version &lhs, const Version &rhs)
{
if (lhs.major != rhs.major)
@@ -65,6 +71,17 @@ inline bool operator > (const Version &lhs, const Version &rhs)
return (lhs.minor > rhs.minor);
}
+inline bool operator >= (const Version &lhs, const Version &rhs)
+{
+ return !(lhs < rhs);
+}
+
+
+inline bool operator <= (const Version &lhs, const Version &rhs)
+{
+ return !(lhs > rhs);
+}
+
inline uint qHash(const Version &v)
{
return qHash(v.major * 100 + v.minor * 10);
@@ -94,6 +111,11 @@ inline bool operator == (const VersionProfile &lhs, const VersionProfile &rhs)
return lhs.version == rhs.version;
}
+inline bool operator != (const VersionProfile &lhs, const VersionProfile &rhs)
+{
+ return !(lhs == rhs);
+}
+
inline bool operator < (const VersionProfile &lhs, const VersionProfile &rhs)
{
if (lhs.profile != rhs.profile)
@@ -132,13 +154,47 @@ struct Function
QList<Argument> arguments;
};
+inline bool operator== (const Argument &lhs, const Argument &rhs)
+{
+ if ((lhs.type != rhs.type) || (lhs.name != rhs.name) || (lhs.direction != rhs.direction)) {
+ return false;
+ }
+
+ return (lhs.mode != rhs.mode);
+}
+
+inline bool operator!= (const Argument &lhs, const Argument &rhs)
+{
+ return !(lhs == rhs);
+}
+
+inline bool operator== (const Function &lhs, const Function &rhs)
+{
+ if ((lhs.returnType != rhs.returnType) || (lhs.name != rhs.name)) {
+ return false;
+ }
+
+ return (lhs.arguments == rhs.arguments);
+}
+
+inline bool operator!= (const Function &lhs, const Function &rhs)
+{
+ return !(lhs == rhs);
+}
+
typedef QList<Function> FunctionList;
typedef QMap<VersionProfile, FunctionList> FunctionCollection;
+struct FunctionProfile
+{
+ VersionProfile::OpenGLProfile profile;
+ Function function;
+};
+
class SpecParser
{
public:
- explicit SpecParser();
+ virtual ~SpecParser() {}
QString specFileName() const
{
@@ -150,22 +206,28 @@ public:
return m_typeMapFileName;
}
- QList<Version> versions() const {return m_versions;}
- QList<VersionProfile> versionProfiles() const {return m_functions.uniqueKeys();}
+ virtual QList<Version> versions() const = 0;
+
+ QList<VersionProfile> versionProfiles() const {return versionFunctions().uniqueKeys();}
QList<Function> functionsForVersion(const VersionProfile &v) const
{
- return m_functions.values(v);
+ return versionFunctions().values(v);
}
QStringList extensions() const
{
- return QStringList(m_extensionFunctions.uniqueKeys());
+ return QStringList(extensionFunctions().uniqueKeys());
}
QList<Function> functionsForExtension(const QString &extension)
{
- return m_extensionFunctions.values(extension);
+ QList<Function> func;
+
+ Q_FOREACH (const FunctionProfile &f, extensionFunctions().values(extension))
+ func.append(f.function);
+
+ return func;
}
void setSpecFileName(QString arg)
@@ -178,25 +240,15 @@ public:
m_typeMapFileName = arg;
}
- void parse();
+ virtual bool parse() = 0;
protected:
- bool parseTypeMap();
- void parseEnums();
- void parseFunctions(QTextStream &stream);
- bool inDeprecationException(const QString &functionName) const;
+ virtual const QMultiHash<VersionProfile, Function> &versionFunctions() const = 0;
+ virtual const QMultiMap<QString, FunctionProfile> &extensionFunctions() const = 0;
private:
QString m_specFileName;
QString m_typeMapFileName;
-
- QMap<QString, QString> m_typeMap;
- QMultiMap<VersionProfile, Function> m_functions;
-
- QList<Version> m_versions;
-
- // Extension support
- QMultiMap<QString, Function> m_extensionFunctions;
};
#endif // SPECPARSER_H