コード例 #1
0
ファイル: DataBuffer.cpp プロジェクト: SBU-BMI/nscale
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;
}
コード例 #2
0
ファイル: Source4_6.c プロジェクト: simsimzone/ch4
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;
		}
	}
}