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. |