summaryrefslogtreecommitdiffstats
path: root/sigmod/Object.h
diff options
context:
space:
mode:
Diffstat (limited to 'sigmod/Object.h')
-rw-r--r--sigmod/Object.h250
1 files changed, 5 insertions, 245 deletions
diff --git a/sigmod/Object.h b/sigmod/Object.h
index e7e0b4d1..7cd4097e 100644
--- a/sigmod/Object.h
+++ b/sigmod/Object.h
@@ -22,30 +22,21 @@
#ifndef SIGMOD_OBJECT
#define SIGMOD_OBJECT
-// Sigcore includes
-#include <sigcore/Fraction.h>
-#include <sigcore/Matrix.h>
-#include <sigcore/Script.h>
-
// Sigmod includes
#include "Global.h"
// Qt includes
-#include <QtCore/QBuffer>
#include <QtCore/QObject>
-#include <QtCore/QPoint>
-#include <QtCore/QStringList>
-#include <QtCore/QVariant>
-#include <QtCore/QVarLengthArray>
-#include <QtGui/QPainterPath>
#include <QtXml/QDomElement>
-// C includes
-#include <climits>
+// Forward decarations
+namespace Sigcore
+{
+class Fraction;
+}
namespace Sigmod
{
-// Forward decarations
class Game;
/**
@@ -171,237 +162,6 @@ class SIGMOD_EXPORT Object : public QObject
int m_id;
const Object* const m_parent;
};
-
-template<typename T> inline void loadValue(const QDomElement& xml, T* value)
-{
- *value = QVariant(xml.firstChild().toText().data()).value<T>();
-}
-
-template<> inline void loadValue<bool>(const QDomElement& xml, bool* value)
-{
- *value = (xml.firstChild().toText().data() == "true");
-}
-
-template<> inline void loadValue<int>(const QDomElement& xml, int* value)
-{
- *value = xml.firstChild().toText().data().toInt();
-}
-
-template<> inline void loadValue<Sigcore::Fraction>(const QDomElement& xml, Sigcore::Fraction* value)
-{
- value->set(xml.attribute("numerator", "1").toInt(), xml.attribute("denominator", "1").toInt());
- value->reduce();
-}
-
-template<> inline void loadValue<QPoint>(const QDomElement& xml, QPoint* value)
-{
- value->setX(xml.attribute("x", "0").toInt());
- value->setY(xml.attribute("y", "0").toInt());
-}
-
-template<> inline void loadValue<QPainterPath>(const QDomElement& xml, QPainterPath* value)
-{
- QDataStream stream(QByteArray::fromBase64(xml.firstChild().toText().data().toUtf8()));
- stream >> *value;
-}
-
-template<> inline void loadValue<QByteArray>(const QDomElement& xml, QByteArray* value)
-{
- *value = QByteArray::fromBase64(xml.firstChild().toText().data().toUtf8());
-}
-
-template<> inline void loadValue<Sigcore::Script>(const QDomElement& xml, Sigcore::Script* value)
-{
- value->setInterpreter(xml.attribute("interpreter", ""));
- value->setScript(xml.firstChild().toText().data());
-}
-
-template<typename T> inline void loadEnum(const QDomElement& xml, T* value, const QStringList& array)
-{
- *value = static_cast<T>(array.indexOf(xml.firstChild().toText().data()));
-}
-
-template<typename T, int S> inline void loadArray(const QDomElement& xml, QVarLengthArray<T, S>* value)
-{
- QDomElement node = xml.firstChildElement("element");
- while (!node.isNull())
- {
- int index = node.attribute("index", "-1").toInt();
- if ((0 <= index) && (index < value->size()))
- loadValue(node, value->data() + index);
- node = node.nextSiblingElement("element");
- }
-}
-
-inline void loadList(const QDomElement& xml, QList<int>* value)
-{
- QDomElement node = xml.firstChildElement("element");
- int element;
- while (!node.isNull())
- {
- loadValue(node, &element);
- if (!value->contains(element))
- value->append(element);
- node = node.nextSiblingElement("element");
- }
-}
-
-inline void loadMap(const QDomElement& xml, QMap<int, int>* value, const QString& valueName)
-{
- QDomElement node = xml.firstChildElement("element");
- int key;
- int keyValue;
- while (!node.isNull())
- {
- loadValue(node.firstChildElement("key"), &key);
- loadValue(node.firstChildElement(valueName), &keyValue);
- (*value)[key] = keyValue;
- node = node.nextSiblingElement("element");
- }
-}
-
-template<typename T> inline void loadMatrix(const QDomElement& xml, Sigcore::Matrix<T>* value)
-{
- int height = xml.attribute("height", "1").toInt();
- int width = xml.attribute("width", "1").toInt();
- value->resize(width, height);
- QDomElement node = xml.firstChildElement("element");
- while (!node.isNull())
- {
- int row = node.attribute("row", "-1").toInt();
- int column = node.attribute("column", "-1").toInt();
- if ((0 <= row) && (row < height) && (0 <= column) && (column < width))
- loadValue(node, &value->operator()(row, column));
- node = node.nextSiblingElement("element");
- }
-}
-
-template<typename T> inline QDomElement saveValue(const QString& name, const T& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.appendChild(QDomDocument().createTextNode(QVariant::fromValue<T>(value).toString()));
- return element;
-}
-
-template<> inline QDomElement saveValue<bool>(const QString& name, const bool& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.appendChild(QDomDocument().createTextNode(value ? "true" : "false"));
- return element;
-}
-
-template<> inline QDomElement saveValue<int>(const QString& name, const int& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.appendChild(QDomDocument().createTextNode(QString::number(value)));
- return element;
-}
-
-template<> inline QDomElement saveValue<QString>(const QString& name, const QString& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.appendChild(QDomDocument().createTextNode(value));
- return element;
-}
-
-template<> inline QDomElement saveValue<Sigcore::Fraction>(const QString& name, const Sigcore::Fraction& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.setAttribute("numerator", value.numerator());
- element.setAttribute("denominator", value.denominator());
- return element;
-}
-
-template<> inline QDomElement saveValue<QPoint>(const QString& name, const QPoint& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.setAttribute("x", value.x());
- element.setAttribute("y", value.y());
- return element;
-}
-
-template<> inline QDomElement saveValue<QPainterPath>(const QString& name, const QPainterPath& value)
-{
- QByteArray array;
- QDataStream stream(&array, QIODevice::WriteOnly);
- stream << value;
- QDomElement element = QDomDocument().createElement(name);
- element.appendChild(QDomDocument().createTextNode(array.toBase64()));
- return element;
-}
-
-template<> inline QDomElement saveValue<QByteArray>(const QString& name, const QByteArray& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.appendChild(QDomDocument().createTextNode(value.toBase64()));
- return element;
-}
-
-template<> inline QDomElement saveValue<Sigcore::Script>(const QString& name, const Sigcore::Script& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.setAttribute("interpreter", value.interpreter());
- element.appendChild(QDomDocument().createCDATASection(value.script()));
- return element;
-}
-
-template<typename T> inline QDomElement saveEnum(const QString& name, const T& value, const QStringList& array)
-{
- return saveValue<QString>(name, array[value]);
-}
-
-template<typename T, int S> inline QDomElement saveArray(const QString& name, const QVarLengthArray<T, S>& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- for (int i = 0; i < value.size(); ++i)
- {
- QDomElement valueElement = saveValue("element", value[i]);
- valueElement.setAttribute("index", QString::number(i));
- element.appendChild(valueElement);
- }
- return element;
-}
-
-inline QDomElement saveList(const QString& name, const QList<int>& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- for (int i = 0; i < value.size(); ++i)
- element.appendChild(saveValue("element", value.at(i)));
- return element;
-}
-
-inline QDomElement saveMap(const QString& name, const QMap<int, int>& value, const QString& valueName)
-{
- QDomElement element = QDomDocument().createElement(name);
- const QList<int> keys = value.keys();
- foreach (int key, keys)
- {
- QDomElement data = QDomDocument().createElement("element");
- data.appendChild(saveValue("key", key));
- data.appendChild(saveValue(valueName, value[key]));
- element.appendChild(data);
- }
- return element;
-}
-
-template<typename T> inline QDomElement saveMatrix(const QString& name, const Sigcore::Matrix<T>& value)
-{
- QDomElement element = QDomDocument().createElement(name);
- element.setAttribute("height", value.height());
- element.setAttribute("width", value.width());
- for (int i = 0; i < value.height(); ++i)
- {
- for (int j = 0; j < value.width(); ++j)
- {
- QDomElement valueElement = saveValue("element", value(i, j));
- valueElement.setAttribute("row", QString::number(i));
- valueElement.setAttribute("column", QString::number(j));
- element.appendChild(valueElement);
- }
- }
- return element;
-}
-
}
#endif