|
From: <le...@us...> - 2006-12-04 10:29:37
|
Revision: 50
http://svn.sourceforge.net/qcell/?rev=50&view=rev
Author: lessm
Date: 2006-12-04 02:29:27 -0800 (Mon, 04 Dec 2006)
Log Message:
-----------
- LocalFunction can generate 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-02 16:26:36 UTC (rev 49)
+++ trunk/qcell/baseheaders/LocalFunction.h 2006-12-04 10:29:27 UTC (rev 50)
@@ -3,6 +3,9 @@
#include <QVector>
#include <QString>
+#include <QDomDocument>
+#include <QDomElement>
+#include <QDomText>
#include <math.h>
@@ -27,17 +30,20 @@
QVector<int> productArguments;
QVector<int> freeArguments;
FUNCTION_TYPE functionMode;
- int numArg, maxArgVal;
+ int numArg, maxArgVal, numElements;
QString script;
protected:
+//public:
void resizeValueTable(void);
+ int mostPopularValue(void);
+
public:
LocalFunction();
~LocalFunction();
- void inti(int numberOfArguments, int AlphabetSize);
+ void inti(int numberOfArguments, int maxArgumentVelue);
// args is vector contein index of arguments to sum
void setSumArguments(QVector<int> args);
@@ -65,6 +71,8 @@
int resolve(QVector<int> arg);
double resolve(QVector<double> arg);
+
+ QString toXmlString(void);
};
#endif
Modified: trunk/qcell/basesources/LocalFunction.cpp
===================================================================
--- trunk/qcell/basesources/LocalFunction.cpp 2006-12-02 16:26:36 UTC (rev 49)
+++ trunk/qcell/basesources/LocalFunction.cpp 2006-12-04 10:29:27 UTC (rev 50)
@@ -2,27 +2,64 @@
void LocalFunction::resizeValueTable(void)
{
+
switch(functionMode)
{
- case LocalFunction::FUNCTION_TYPE::SUM:
case LocalFunction::FUNCTION_TYPE::PRODUCT:
- valueTable.resize(maxArgVal);
+ numElements = pow(maxArgVal - 1, productArguments.size()) + 1;
break;
+ case LocalFunction::FUNCTION_TYPE::SUM:
+ numElements = sumArguments.size() * (maxArgVal - 1) + 1;
+ break;
+
case LocalFunction::FUNCTION_TYPE::MIXED_SUM_SWITCH:
- valueTable.resize(freeArguments.size() * maxArgVal * (sumArguments.size() * (maxArgVal - 1) + 1));
+ numElements = freeArguments.size() * maxArgVal * (sumArguments.size() * (maxArgVal - 1) + 1);
break;
case LocalFunction::FUNCTION_TYPE::MIXED_PRODUCT_SWITCH:
- valueTable.resize(freeArguments.size() * maxArgVal * (pow(maxArgVal - 1, productArguments.size()) + 1));
+ numElements = freeArguments.size() * maxArgVal * (pow(maxArgVal - 1, productArguments.size()) + 1);
break;
case LocalFunction::FUNCTION_TYPE::SWITCH:
- valueTable.resize(numArg * maxArgVal);
+ numElements = numArg * maxArgVal;
break;
}
+
+ valueTable.resize(numElements);
}
+int LocalFunction::mostPopularValue(void)
+{
+ int i, t, out;
+ QVector<int> temp;
+
+ if(functionMode==LocalFunction::FUNCTION_TYPE::SCRIPT)
+ return -1;
+
+ temp.resize(maxArgVal);
+ for(i=0;i<numElements;++i)
+ {
+ if(temp[valueTable[i]]>numElements/2)
+ return valueTable[i];
+ else
+ temp[valueTable[i]]++;
+ }
+
+ t = temp[0];
+ out = 0;
+
+ for(i=i;i<temp.size();++i)
+ {
+ if(t<temp[i])
+ {
+ t = temp[i];
+ out = i;
+ }
+ }
+ return out;
+}
+
LocalFunction::LocalFunction()
{
functionMode = LocalFunction::FUNCTION_TYPE::SWITCH;
@@ -33,10 +70,10 @@
functionMode = LocalFunction::FUNCTION_TYPE::SWITCH;
}
-void LocalFunction::inti(int numberOfArguments, int AlphabetSize)
+void LocalFunction::inti(int numberOfArguments, int maxArgumentVelue)
{
numArg = numberOfArguments;
- maxArgVal = AlphabetSize;
+ maxArgVal = maxArgumentVelue;
}
void LocalFunction::setSumArguments(QVector<int> arg)
@@ -216,3 +253,133 @@
return out;
}
+
+
+QString LocalFunction::toXmlString(void)
+{
+ int i, fillValue = mostPopularValue();
+ QString index, value, data;
+ QDomDocument dom;
+ QDomElement root, element, subElement;
+ QDomText textData = dom.createTextNode("");
+ root = dom.createElement("LocalFunction");
+
+ root.setAttribute("ArgumentsNumber", numArg);
+ root.setAttribute("AlphabetSize", maxArgVal);
+
+ 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);
+ }
+ }
+ element.appendChild(textData);
+ root.appendChild(element);
+ break;
+
+ 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);
+ }
+ }
+ element.appendChild(textData);
+ root.appendChild(element);
+ break;
+
+ 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 + ";";
+ }
+ 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);
+ }
+ }
+ element.appendChild(textData);
+ root.appendChild(element);
+ break;
+
+ 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 + ";";
+ }
+ 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);
+ }
+ }
+
+ element.appendChild(textData);
+ root.appendChild(element);
+
+ break;
+
+ 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);
+ }
+ }
+
+ element.appendChild(textData);
+ root.appendChild(element);
+
+ break;
+
+ case LocalFunction::FUNCTION_TYPE::SCRIPT:
+ element = dom.createElement("Script");
+ textData.setData(script);
+ element.appendChild(textData);
+ root.appendChild(element);
+ break;
+ }
+
+ dom.appendChild(root);
+ return dom.toString();
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|