diff options
| -rw-r--r-- | parsingtoolbox.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp new file mode 100644 index 0000000..46f159d --- /dev/null +++ b/parsingtoolbox.cpp @@ -0,0 +1,132 @@ +#include <QString> + +#include "parsingtoolbox.h" +#include "node/sortresult.h" + + +ParsingToolBox::ParsingToolBox() +{ + m_logicOp = new QMap<QString,BooleanCondition::LogicOperator>(); + m_logicOp->insert(">=",BooleanCondition::GreaterOrEqual); + m_logicOp->insert("<=",BooleanCondition::LesserOrEqual); + m_logicOp->insert("<",BooleanCondition::LesserThan); + m_logicOp->insert("=",BooleanCondition::Equal); + m_logicOp->insert(">",BooleanCondition::GreaterThan); +} +ExecutionNode* ParsingToolBox::addSort(ExecutionNode* e,bool b) +{ + SortResultNode* nodeSort = new SortResultNode(); + nodeSort->setSortAscending(b); + e->setNextNode(nodeSort); + return nodeSort; +} +bool ParsingToolBox::readLogicOperator(QString& str,BooleanCondition::LogicOperator& op) +{ + QString longKey; + foreach(QString tmp, m_logicOp->keys()) + { + if(str.startsWith(tmp)) + { + if(longKey.size()<tmp.size()) + { + longKey = tmp; + } + } + } + if(longKey.size()>0) + { + str=str.remove(0,longKey.size()); + op = m_logicOp->value(longKey); + return true; + } + + return false; +} +Validator* ParsingToolBox::readValidator(QString& str) +{ + Validator* returnVal=NULL; + bool expectSquareBrasket=false; + bool isOk = true; + if((str.startsWith("["))) + { + str=str.remove(0,1); + expectSquareBrasket = true; + } + + BooleanCondition::LogicOperator myLogicOp = BooleanCondition::Equal; + bool hasReadLogicOperator = readLogicOperator(str,myLogicOp); + int value=0; + + if(readNumber(str,value)) + { + if(str.startsWith("-")) + { + str=str.remove(0,1); + int end=0; + if(readNumber(str,end)) + { + if(expectSquareBrasket) + { + if(str.startsWith("]")) + { + str=str.remove(0,1); + isOk=true; + } + else + { + isOk=false; + } + } + if(isOk) + { + str=str.remove(0,1); + Range* range = new Range(); + range->setValue(value,end); + returnVal = range; + } + } + } + else + { + if((expectSquareBrasket)&&(str.startsWith("]"))) + { + str=str.remove(0,1); + isOk=true; + } + if(isOk) + { + BooleanCondition* condition = new BooleanCondition(); + condition->setValue(value); + condition->setOperator(myLogicOp); + returnVal = condition; + } + } + } + return returnVal; +} +bool ParsingToolBox::readNumber(QString& str, int& myNumber) +{ + if(str.isEmpty()) + return false; + + QString number; + int i=0; + + while(i<str.length() && str[i].isNumber()) + { + number+=str[i]; + ++i; + } + + if(number.isEmpty()) + return false; + + bool ok; + myNumber = number.toInt(&ok); + if(ok) + { + str=str.remove(0,number.size()); + return true; + } + return false; +} |