本文整理汇总了C++中ListIterator::advance方法的典型用法代码示例。如果您正苦于以下问题:C++ ListIterator::advance方法的具体用法?C++ ListIterator::advance怎么用?C++ ListIterator::advance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ListIterator
的用法示例。
在下文中一共展示了ListIterator::advance方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: doAssign
void doAssign(ListIterator &i, ExprNode *&node)
{
ExprNode *left, *right;
string eq;
ListIterator temp = i;
node = new Variable(i.token().tokenChar());
if(!i.ended())
i.advance();
if(!i.ended())
eq = i.token().tokenChar();
if(eq == "=" && !i.ended())
{
while(eq == "=" && !i.ended())
{
if(!i.ended())
i.advance();
if(!i.ended())
doSum(i, right);
node = new Operation(node, eq, right);
if(!i.ended())
eq = i.token().tokenChar();
else
eq = "Done";
}
}
else if(!i.ended() && (i.token().tokenChar() != "("))
i = temp;
else if(!i.ended() && (i.token().tokenChar() == "("))
{
i = temp;
doCall(i, node);
}
}
示例2: getValue
// getValue
// Gets the value of the number/expression at the current position
// If the current value is an integer, return it
// If it's a parenthetical expression, evaluate, and return
// evalMultiplication is a flag used to ensure multiplication happens before addition
// If true, it will handle any multiplication that is applied to the current value
// That way, what is returned to the addition function is what we actually want to add
// Parameters:
// iter - the iterator for the list of tokens
// postExpr - the postfix expression we are converting to
// evalMultiplication (input boolean) whether to evaluate multiplication, see above
// Pre-condition: expr[pos] is an int or parenthesis
// Post-condition: expr[pos] is the end of the value
// If it was an int, it's on the int
// If it was a parenthesis, it's on the end parenthesis
// If handling multiplication, it's on the last multiplied int
// postExpr has the values handled here pushed to it
void getValue(ListIterator& iter, TokenList& postExpr, bool evalMultiplication)
{
bool negative = false;
if (!iter.currentIsInteger() && iter.tokenChar() == '-')
{
negative = true;
iter.advance();
}
if (iter.currentIsInteger())
{
postExpr.push_back(iter.integerValue());
if (negative)
{
postExpr.push_back(Token('~'));
}
while (evalMultiplication && isNextOperatorMultiplication(iter))
{
iter.advance();
handleMultiplyLevelOperation(iter, postExpr);
}
}
else
{
handleParenthesis(iter, postExpr);
if (negative)
{
postExpr.push_back(Token('~'));
}
}
}
示例3: addOp
//This function takes in the iterator, and rewrite both sides of the sum expression in postFix
//Pre- The position is at a symbol +,-,*,/,%
//Post- It will change postFix and the iterator
void addOp(ListIterator &iter, TokenList &postFix)
{
int pos;
Token saveToken;
bool solved = false;
while(solved == false)
{
if (iter.tokenChar() == '*' || iter.tokenChar() == '/' || iter.tokenChar() == '%')
{
//This means that a product operation was encountered immediately so the prgoram can finish the expression and return without
multOp(iter, postFix);
}
else if (iter.tokenChar() == '+' || iter.tokenChar() == '-')
{
//We advance to save the next number and then again to check the next character
saveToken = iter.token();
iter.advance();
getValue(iter, postFix);
iter.advance();
if (iter.tokenChar() == '*' || iter.tokenChar() == '/' || iter.tokenChar() == '%')
{
//If a product expression is found it will calculate the entirety of that
multOp(iter, postFix);
}
postFix.push_back(saveToken);
}
else
{
solved = true;
}
}
}
示例4: doCompare
void doCompare(ListIterator &i, ExprNode *&test)
{
ExprNode *trueCase, *falseCase, *right;
string comp;
doSum(i, test);
if(!i.ended())
{
if(i.token().tokenChar() == ")")
i.advance();
}
if(!i.ended() && i.token().isOperator())
{
comp = i.token().tokenChar();
i.advance();
doSum(i, right);
test = new Operation(test, comp, right);
}
if(!i.ended() && (i.token().tokenChar() == "?" || i.token().isOperator()))
{
i.advance();
doSum(i, trueCase);
}
if(!i.ended() && (i.token().isOperator() || i.token().tokenChar() == ":"))
{
i.advance();
doSum(i, falseCase);
test = new Conditional(test, trueCase, falseCase);
}
}
示例5: zeroth
const List<Object>& List<Object>::operator =( const List<Object>& rhs ) {
if (this != &rhs) {
makeEmpty();
ListIterator<Object> rightiter = rhs.first( );
ListIterator<Object> myiterator = zeroth();
while( rightiter.isValid() ) {
insert( rightiter.retrieve(), myiterator );
rightiter.advance();
myiterator.advance();
}
}
return( *this );
}
示例6: doSum
void doSum(ListIterator &i, TokenList *pf)
{
char oper; // For holding the operator
doProduct(i, pf); // Sum = product + product
if(!i.ended())
oper = i.token().tokenChar(); // Grab an operator, only if current != NULL
while(((oper == '+') || (oper == '-')) && !i.ended() )
{
i.advance(); // Move to next token, an int or a '('
doProduct(i, pf);
Token t(oper);
pf->push_back(t); // Add the operator the the expression
if(!i.ended())
oper = i.token().tokenChar(); // Grab the next operator
}
}
示例7: getValue
//The function takes in an iterator and TokenList and will rewrite numbers at the iterator's
//Pre- The position is located at a number or a parethesis
//Post- It will write to the postFix TokenList and update the iterator
void getValue(ListIterator &iter, TokenList &postFix)
{
//If parethesis are found this else if will rewrite the parenthesis in postFix
if (iter.tokenChar() == '(')
{
iter.advance();
getValue(iter, postFix);
iter.advance();
assignOp(iter, postFix);
}
//If the current position is an integer
else
{
postFix.push_back(iter.token());
}
}
示例8: doCall
void doCall(ListIterator &i, ExprNode *&node)
{
string name;
ExprNode *parameters[10];
int p = 0;
if(!i.ended())
name = i.token().tokenChar();
i.advance();
if(!i.ended())
doCompare(i, node);
parameters[p] = node;
p++;
if(!i.ended()){
while(!i.ended() && i.token().tokenChar() != ")")
{
if(!i.ended())
doCompare(i, node);
parameters[p] = node;
p++;
}
}
for(; p < 10; p++)
parameters[p] = NULL;
node = new Function(name, parameters);
}
示例9: multOp
//This function takes in the iterator, and the TokeList, and will rewrite any product expressions
//Pre- The position will be on a operation symbol that is either *, /, %
//Post- It will rewrite the infix to postFix product expression
void multOp(ListIterator &iter, TokenList &postFix)
{
Token saveToken;
//This loop will run indefinately and rewrite to postFix until the product expression ends
while (iter.tokenChar() == '*' || iter.tokenChar() == '/' || iter.tokenChar() == '%')
{
saveToken = iter.token();
iter.advance();
getValue(iter, postFix);
iter.advance();
postFix.push_back(saveToken);
}
}
示例10:
// output operation
// Display all of the tokens in the list
ostream& operator<<( ostream &stream, TokenList &t )
{
for (ListIterator iter = t.begin(); iter != t.end(); iter.advance())
{
stream << iter.token() << " ";
}
return stream;
}
示例11: makeFunction
void makeFunction(ListIterator& infix, TokenList& list, FunctionDef& funs)
{
infix.advance(); //advance past deffn
string name = tokenText(infix, list);
funs[name] = FunDef();
FunDef* function = &funs[name]; //to avoid multiple lookups in this function body
function->name = name;
infix.advance(); //advance past function name
infix.advance(); //advance past '('
function->locals = new VarTree();
int paramcount = 0;
while (tokenText(infix, list) != ")")
{
string paramname = tokenText(infix, list);
function->parameter[paramcount] = paramname;
function->locals->assign(paramname, 0);
++paramcount;
infix.advance();
if (tokenText(infix, list) == ",")
infix.advance();
} //we are now on a ")"
infix.advance(); //so advance past ")"
for (int i = paramcount; i < 10; ++i)
function->parameter[i] = "";
function->functionBody = assignmentToTree(infix,list,funs);
#ifdef DEBUG
cout << "Function:" << endl;
cout << " Name: " << function->name << endl;
for (int i = 0; i < 10 && function->parameter[i] != ""; ++i)
cout << " Parameter " << i << ": " << function->parameter[i] << endl;
cout << " VarTree: " << function->locals << endl;
cout << " VarTree: " << *function->locals << endl;
cout << " ExprNode: " << function->functionBody << endl;
cout << " ExprNode: " << *function->functionBody << endl;
#endif
}
示例12: handleMultiplyLevelOperation
// handleMultiplyLevelOperation
// Handles *, /, and %
// Parameters:
// iter - the iterator for the list of tokens
// postExpr - the postfix expression we are converting to
// Pre-condition: iter.tokenChar() == '*' or '/' or '%'
// Post-condition: iter.tokenChar() == end of what was multiplied (last int/parenthesis)
// postExpr has both operands and the operator pushed to it
void handleMultiplyLevelOperation(ListIterator& iter, TokenList& postExpr)
{
Token operation(iter.token());
iter.advance();
getValue(iter, postExpr, false); //Do not handle multiplication (see getValue())
postExpr.push_back(operation);
}
示例13: handleAdditionLevelOperation
// handleMultiplyLevelOperation
// Handles + and -
// Parameters:
// iter - the iterator for the list of tokens
// postExpr - the postfix expression we are converting to
// Pre-condition: iter.tokenChar() == '+' or '-'
// Post-condition: iter.tokenChar() == end of what was added (last int/parenthesis)
// postExpr has both operands and the operator pushed to it
void handleAdditionLevelOperation(ListIterator& iter, TokenList& postExpr)
{
Token operation(iter.token());
iter.advance();
getValue(iter, postExpr, true); //Do evaluate multiplication (see getValue())
postExpr.push_back(operation);
}
示例14: doFactor
void doFactor(ListIterator &i, TokenList *pf) // Grabs a factor; evaluates if needed; return
{
int left;
// factor = int || factor = (int + int)
if(i.token().tokenChar() == '(')
{
i.advance();
doSum(i, pf);
}
else
{
left = i.token().integerValue(); // grab the factor
Token t(left);
pf->push_back(t); // add it to the list
}
if(!i.ended())
i.advance();
}
示例15: handleParenthesis
// handleParenthesis
// Helper function to handle evaluating parenthesis
// Parameters:
// iter - the iterator for the list of tokens
// postExpr - the postfix expression we are converting to
// Pre-condition: iter.tokenChar() == '('
// Post-condition: iter.tokenChar() == ')'
// postExpr has everything inside the parenthesis pushed to it
void handleParenthesis(ListIterator& iter, TokenList& postExpr)
{
iter.advance();
getValue(iter, postExpr, false);
while (iter.tokenChar() != ')')
{
evalStep(iter, postExpr);
}
}