int DataBuffer::pop(DataType &data) { data.second = NULL; data.first = 0; if (isFinished()) return STOP; if (!canPop()) return EMPTY; data = buffer.front(); buffer.pop(); //cci::common::Debug::print("DataBuffer: pop called. %d load\n", buffer.size()); return READY; }
main() { int type; double op2; char s[MAXOP]; while ((type = getop(s)) != EOF) { switch (type) { case NUMBER: push(atof(s)); break; case COMMAND: stackCommands(s[0]); break; case UNARY_FUNCTION: push(unaryFunc(s, pop())); break; case BINARY_FUNCTION: op2 = pop(); push(binFunc(s, pop(), op2)); break; case ASSIGNER: assigner = 1; break; case VARIABLE: if (assigner) { push(op2 = pop()); setVariable(s, op2); assigner = 0; } else { push(getVariable(s)); } break; case OPERATOR: op2 = pop(); push(op(pop(), s[0], op2)); break; case '\n': if (assigner) { index--; rpnError("No variable to assign to.", index); index = -1; assigner = 0; break; } if (!underCommand && canPop()) { push(op2 = pop()); setVariable("ans", op2); stackCommands('T'); stackCommands('C'); /* empty stack and start a new line. */ } underCommand = 0; index = -1; break; case ERROR: rpnError(err, index); index = -1; break; } } }