68 if (
op==
"+")
return leftVal + rightVal;
69 if (
op==
"-")
return leftVal - rightVal;
70 if (
op==
"*")
return leftVal * rightVal;
71 if (
op==
"/")
return leftVal / rightVal;
81 double rightVal = right->getValue();
86 if (op==
"acos") return ::acos(rightVal);
87 if (op==
"asin") return ::asin(rightVal);
88 if (op==
"atan") return ::atan(rightVal);
89 if (op==
"exp") return ::exp(rightVal);
90 if (op==
"abs") return ::fabs(rightVal);
91 if (op==
"sqrt") return ::sqrt(rightVal);
93 if (op==
"log10") return ::log10(rightVal);
126 ExpressionException ee(
"Variable " + name +
" undefined.");
135 value(iValue), isOperator(isOp), resolved(false), priority(iPriority),
136 expNode(0), used(false)
140 ostr <<
" Value '" << value;
141 ostr <<
"', operation priority " << priority <<
", ";
143 if (isOperator) ostr <<
"operator";
144 else ostr <<
"not operator";
148 if (used) ostr <<
"used,";
149 else ostr <<
"not used,";
151 if (resolved) ostr <<
"resolved";
152 else ostr <<
"not resolved ";
185 std::ostringstream ostr;
192 std::ostringstream ostr;
201 std::list<ExpNode *>::iterator i=
eList.begin(), itemp;
202 while (i!=
eList.end())
209 std::list<ExpNode *> emptyENodeList;
210 eList = emptyENodeList;
211 std::list<Token> emptyTokenList;
212 tList = emptyTokenList;
261 std::list<ExpNode *>::iterator i;
272 stringstream ss(istr);
275 vector<int> baseOrder;
276 int currentOrder = 0;
278 while (ss >> skipws >> tempc)
296 baseOrder.push_back(currentOrder);
297 str.append(&tempc,1);
301 map<string, int>::iterator it;
310 map<int,int> breakPriority;
315 map<int, bool> breakType;
319 std::string::size_type position = 0;
320 while ((position=str.find(it->first,position+1))!=string::npos)
323 bool sciNotation=
false;
324 if ((it->first==
"+") || (it->first==
"-"))
327 ( ( (str.substr(position-1,1)==
"E") ||
328 (str.substr(position-1,1)==
"e") ) &&
329 (isdigit(str.substr(position-2,1).c_str()[0])) &&
330 (isdigit(str.substr(position+1,1).c_str()[0])) );
335 breaks.push_back(position);
336 breakPriority[position] = it->second + baseOrder[position];
337 breakType[position] =
true;
339 int operandPos = position+(it->first.size());
340 breaks.push_back(operandPos);
341 breakPriority[operandPos] = baseOrder[operandPos];
342 breakType[operandPos] =
false;
347 breaks.push_back(str.size());
356 list<int>::iterator ls = breaks.begin(), rs = ls;
358 for (rs++ ;rs!=breaks.end(); rs++, ls++)
362 string thisToken = str.substr(*ls,(*rs)-(*ls));
363 int thisOop = breakPriority[*ls];
364 bool isOp = breakType[*ls];
367 Token tok(thisToken,thisOop, isOp);
378 char testChar = thisToken.c_str()[0];
379 if (isalpha(testChar))
380 expNode =
new VarNode(thisToken);
383 eList.push_back(expNode);
389 tList.push_back(tok);
399 list<Token>::iterator itt;
403 for (itt =
tList.begin(); itt!=
tList.end(); itt++)
405 if (itt->getResolved()) totalResolved++;
407 return totalResolved;
415 list<Token>::iterator itt, targetToken;
417 if ((
tList.size()==1)&&(
tList.begin()->getResolved()))
425 while (totalResolved<
tList.size())
437 for (itt =
tList.begin(); itt !=
tList.end(); itt++)
439 if ( itt->getOperator() && !itt->getResolved() )
441 if (itt->getPriority()>highestP)
444 highestP=itt->getPriority();
449 if ( targetToken->getOperator() )
452 list<Token>::iterator leftArg=targetToken, rightArg=leftArg;
454 stringstream argstr(targetToken->getArgumentPattern());
458 while (argstr >> thisArg)
466 if (rightArg==
tList.end())
467 cout <<
"Mistake, no right arg for " << targetToken->getValue() << endl;
471 searching = (rightArg->getUsed());
483 if (leftArg ==
tList.begin())
484 cout <<
"Mistake - no right argument for operator?!" << endl;
488 searching = (leftArg->getUsed());
496 if (targetToken->getArgumentPattern()==
"RL")
499 new BinOpNode(targetToken->getValue(),leftArg->getNode(), rightArg->getNode());
500 targetToken->setNode(opNode);
501 eList.push_back(opNode);
503 targetToken->setResolved(
true);
504 root = targetToken->getNode();
510 if (targetToken->getArgumentPattern()==
"R")
513 new FuncOpNode(targetToken->getValue(),rightArg->getNode());
514 targetToken->setNode(opNode);
516 eList.push_back(opNode);
518 targetToken->setResolved(
true);
519 root = targetToken->getNode();
539 std::list<ExpNode *>::iterator i;
542 for (t=0, i=
eList.begin(); i!=
eList.end(); t++, i++)
566 std::list<ExpNode *>::iterator i;
569 for (t=0, i=
eList.begin(); i!=
eList.end(); t++, i++)
586 gotSet |=
set(
"pi",
PI);
603 RinexObsData::RinexObsTypeMap::const_iterator i;
604 for (i=rotm.begin(); i!=rotm.end(); i++)
605 gotSet |=
set(i->first.type, i->second.data);
616 for (SvObsEpoch::const_iterator i=
soe.begin(); i !=
soe.end(); i++)
623 std::string type, band, attribute;
625 switch (i->first.type)
637 switch (i->first.band)
648 switch (i->first.code)
672 std::string
id = type + band + attribute;
674 if (
id.length() != 3)
675 std::cout <<
"Unimplimented ObsID:" << i->first << std::endl;
677 gotSet |=
set(
id, i->second);