|
From: <le...@us...> - 2006-12-04 13:01:21
|
Revision: 51
http://svn.sourceforge.net/qcell/?rev=51&view=rev
Author: lessm
Date: 2006-12-04 05:01:14 -0800 (Mon, 04 Dec 2006)
Log Message:
-----------
- LocalFunction class can be set from xmlString
Modified Paths:
--------------
trunk/qcell/baseheaders/LocalFunction.h
trunk/qcell/basesources/LocalFunction.cpp
Modified: trunk/qcell/baseheaders/LocalFunction.h
===================================================================
--- trunk/qcell/baseheaders/LocalFunction.h 2006-12-04 10:29:27 UTC (rev 50)
+++ trunk/qcell/baseheaders/LocalFunction.h 2006-12-04 13:01:14 UTC (rev 51)
@@ -6,6 +6,7 @@
#include <QDomDocument>
#include <QDomElement>
#include <QDomText>
+#include <QStringList>
#include <math.h>
@@ -37,13 +38,21 @@
//public:
void resizeValueTable(void);
int mostPopularValue(void);
+ QString valueTableToString(void);
+ QString valueTableToString(int fillValue);
+ QString sumArgumentsToString(void);
+ QString productArgumentsToString(void);
+ void valueTableFromString(QString *string);
+ void sumArgumentsFromString(QString *string);
+ void productArgumentsFromString(QString *string);
+
public:
LocalFunction();
~LocalFunction();
- void inti(int numberOfArguments, int maxArgumentVelue);
+ void init(int numberOfArguments, int alphabetSize);
// args is vector contein index of arguments to sum
void setSumArguments(QVector<int> args);
@@ -73,6 +82,8 @@
double resolve(QVector<double> arg);
QString toXmlString(void);
+ bool fromXmlString(QString *xmlString);
+ bool fromDomElement(QDomElement *xmlElement);
};
#endif
Modified: trunk/qcell/basesources/LocalFunction.cpp
===================================================================
--- trunk/qcell/basesources/LocalFunction.cpp 2006-12-04 10:29:27 UTC (rev 50)
+++ trunk/qcell/basesources/LocalFunction.cpp 2006-12-04 13:01:14 UTC (rev 51)
@@ -60,6 +60,97 @@
return out;
}
+QString LocalFunction::valueTableToString(void)
+{
+ int fillValue;
+ QString data, index, value;
+ fillValue = mostPopularValue();
+ for(int i=0;i<numElements;i++)
+ {
+ if(valueTable[i]!=fillValue)
+ {
+ index.setNum(i);
+ value.setNum(valueTable[i]);
+ data = index + ":" + value + ";";
+ }
+ }
+ return data;
+}
+
+QString LocalFunction::valueTableToString(int fillValue)
+{
+ QString data, index, value;
+ for(int i=0;i<numElements;i++)
+ {
+ if(valueTable[i]!=fillValue)
+ {
+ index.setNum(i);
+ value.setNum(valueTable[i]);
+ data += index + ":" + value + ";";
+ }
+ }
+ return data;
+}
+
+QString LocalFunction::sumArgumentsToString(void)
+{
+ int i;
+ QString out, temp;
+ foreach(i, sumArguments)
+ {
+ temp.setNum(i);
+ out += temp + ";";
+ }
+ return out;
+}
+
+QString LocalFunction::productArgumentsToString(void)
+{
+ int i;
+ QString out, temp;
+ foreach(i, productArguments)
+ {
+ temp.setNum(i);
+ out += temp + ";";
+ }
+ return out;
+}
+
+void LocalFunction::valueTableFromString(QString *string)
+{
+ QStringList splitList, element;
+ QString temp;
+ splitList = string->split(";", QString::SplitBehavior::SkipEmptyParts);
+ foreach(temp, splitList)
+ {
+ element = temp.split(":");
+ valueTable[element.at(0).toInt()] = element.at(1).toInt();
+ }
+}
+
+
+void LocalFunction::sumArgumentsFromString(QString *string)
+{
+ QStringList splitList;
+ QString temp;
+ QVector<int> v;
+ splitList = string->split(";", QString::SplitBehavior::SkipEmptyParts);
+ foreach(temp, splitList)
+ v.append(temp.toInt());
+ setSumArguments(v);
+}
+
+void LocalFunction::productArgumentsFromString(QString *string)
+{
+ QStringList splitList;
+ QString temp;
+ QVector<int> v;
+ splitList = string->split(";", QString::SplitBehavior::SkipEmptyParts);
+ foreach(temp, splitList)
+ v.append(temp.toInt());
+ setProductArguments(v);
+}
+
LocalFunction::LocalFunction()
{
functionMode = LocalFunction::FUNCTION_TYPE::SWITCH;
@@ -70,10 +161,10 @@
functionMode = LocalFunction::FUNCTION_TYPE::SWITCH;
}
-void LocalFunction::inti(int numberOfArguments, int maxArgumentVelue)
+void LocalFunction::init(int numberOfArguments, int alphabetSize)
{
numArg = numberOfArguments;
- maxArgVal = maxArgumentVelue;
+ maxArgVal = alphabetSize;
}
void LocalFunction::setSumArguments(QVector<int> arg)
@@ -119,6 +210,10 @@
void LocalFunction::setSwitchFunction(void)
{
+ sumArguments.clear();
+ productArguments.clear();
+ freeArguments.clear();
+ valueTable.clear();
functionMode = LocalFunction::FUNCTION_TYPE::SWITCH;
}
@@ -257,31 +352,22 @@
QString LocalFunction::toXmlString(void)
{
- int i, fillValue = mostPopularValue();
- QString index, value, data;
+ int i, fillValue;
+ QString data, index;
QDomDocument dom;
QDomElement root, element, subElement;
QDomText textData = dom.createTextNode("");
root = dom.createElement("LocalFunction");
-
root.setAttribute("ArgumentsNumber", numArg);
root.setAttribute("AlphabetSize", maxArgVal);
-
+ fillValue = mostPopularValue();
switch(functionMode)
{
case LocalFunction::FUNCTION_TYPE::SUM:
element = dom.createElement("Sum");
element.setAttribute("Fill", fillValue);
- for(i=0;i<numElements;i++)
- {
- if(valueTable[i]!=fillValue)
- {
- index.setNum(i);
- value.setNum(valueTable[i]);
- data = index + ":" + value + ";";
- textData.appendData(data);
- }
- }
+ data = valueTableToString(fillValue);
+ textData.setData(data);
element.appendChild(textData);
root.appendChild(element);
break;
@@ -289,16 +375,8 @@
case LocalFunction::FUNCTION_TYPE::PRODUCT:
element = dom.createElement("Product");
element.setAttribute("Fill", fillValue);
- for(i=0;i<numElements;i++)
- {
- if(valueTable[i]!=fillValue)
- {
- index.setNum(i);
- value.setNum(valueTable[i]);
- data = index + ":" + value + ";";
- textData.appendData(data);
- }
- }
+ data = valueTableToString(fillValue);
+ textData.setData(data);
element.appendChild(textData);
root.appendChild(element);
break;
@@ -306,22 +384,10 @@
case LocalFunction::FUNCTION_TYPE::MIXED_SUM_SWITCH:
element = dom.createElement("Mixed");
element.setAttribute("Fill", fillValue);
- for(i=0;i<sumArguments.size();++i)
- {
- index.setNum(sumArguments[i]);
- data += index + ";";
- }
+ data = sumArgumentsToString();
element.setAttribute("SumArguments", data);
- for(i=0;i<numElements;i++)
- {
- if(valueTable[i]!=fillValue)
- {
- index.setNum(i);
- value.setNum(valueTable[i]);
- data = index + ":" + value + ";";
- textData.appendData(data);
- }
- }
+ data = valueTableToString(fillValue);
+ textData.setData(data);
element.appendChild(textData);
root.appendChild(element);
break;
@@ -329,24 +395,10 @@
case LocalFunction::FUNCTION_TYPE::MIXED_PRODUCT_SWITCH:
element = dom.createElement("Mixed");
element.setAttribute("Fill", fillValue);
- for(i=0;i<productArguments.size();++i)
- {
- index.setNum(productArguments[i]);
- data += index + ";";
- }
+ data = productArgumentsToString();
element.setAttribute("ProductArguments", data);
-
- for(i=0;i<numElements;i++)
- {
- if(valueTable[i]!=fillValue)
- {
- index.setNum(i);
- value.setNum(valueTable[i]);
- data = index + ":" + value + ";";
- textData.appendData(data);
- }
- }
-
+ data = valueTableToString(fillValue);
+ textData.setData(data);
element.appendChild(textData);
root.appendChild(element);
@@ -355,21 +407,10 @@
case LocalFunction::FUNCTION_TYPE::SWITCH:
element = dom.createElement("Switch");
element.setAttribute("Fill", fillValue);
-
- for(i=0;i<numElements;i++)
- {
- if(valueTable[i]!=fillValue)
- {
- index.setNum(i);
- value.setNum(valueTable[i]);
- data = index + ":" + value + ";";
- textData.appendData(data);
- }
- }
-
+ data = valueTableToString(fillValue);
+ textData.setData(data);
element.appendChild(textData);
root.appendChild(element);
-
break;
case LocalFunction::FUNCTION_TYPE::SCRIPT:
@@ -383,3 +424,90 @@
dom.appendChild(root);
return dom.toString();
}
+
+bool LocalFunction::fromXmlString(QString *xmlString)
+{
+ QDomDocument doc;
+ QDomElement element;
+ doc.setContent(*xmlString);
+ element = doc.documentElement();
+ return fromDomElement(&element);
+}
+
+bool LocalFunction::fromDomElement(QDomElement *xmlElement)
+{
+ QDomElement element;
+ QDomText domText;
+ QString text;
+ if(xmlElement->tagName()=="LocalFunction")
+ {
+ init(xmlElement->attribute("ArgumentsNumber").toInt(), xmlElement->attribute("AlphabetSize").toInt());
+ element = xmlElement->firstChildElement();
+ if(element.tagName()=="Sum")
+ {
+ setFunctonType(LocalFunction::FUNCTION_TYPE::SUM);
+ resizeValueTable();
+ valueTable.fill(element.attribute("Fill").toInt());
+ text = element.text();
+ valueTableFromString(&text);
+ }
+ else
+ {
+ if(element.tagName()=="Product")
+ {
+ setFunctonType(LocalFunction::FUNCTION_TYPE::PRODUCT);
+ resizeValueTable();
+ valueTable.fill(element.attribute("Fill").toInt());
+ text = element.text();
+ valueTableFromString(&text);
+ }
+ else
+ {
+ if(element.tagName()=="Mixed")
+ {
+ if(element.hasAttribute("SumArguments"))
+ {
+ text = element.attribute("SumArguments");
+ sumArgumentsFromString(&text);
+ }
+ else
+ if(element.hasAttribute("ProductArguments"))
+ {
+ text = element.attribute("ProductArguments");
+ productArgumentsFromString(&text);
+ }
+ else
+ return 0;
+
+ resizeValueTable();
+ valueTable.fill(element.attribute("Fill").toInt());
+ text = element.text();
+ valueTableFromString(&text);
+ }
+ else
+ {
+ if(element.tagName()=="Switch")
+ {
+ setSwitchFunction();
+ resizeValueTable();
+ valueTable.fill(element.attribute("Fill").toInt());
+ text = element.text();
+ valueTableFromString(&text);
+ }
+ else
+ {
+ if(element.tagName()=="Script")
+ {
+ text = element.text();
+ setScript(text);
+ }
+ else
+ return 0;
+ }
+ }
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|