예제 #1
0
int main(int argc, char** argv)
{

	struct timespec t1, t2;
	int j;	

	clock_gettime(CLOCK_REALTIME, &t1);
	j = getpid();
	clock_gettime(CLOCK_REALTIME, &t2);
	printf("Nanosec time sys call: %ld\n", t2.tv_nsec - t1.tv_nsec);

	clock_gettime(CLOCK_REALTIME, &t1);
	j = procCall();
	clock_gettime(CLOCK_REALTIME, &t2);
	printf("Nanosec time proc call: %ld\n", t2.tv_nsec - t1.tv_nsec);

	


	return 0;

}
예제 #2
0
Object* Parser::parseSubExpression1a(Object* pExpr)
{
	std::auto_ptr<Object> expr(pExpr);

	if(hasTokens() && peekToken().getType() == T_LBRACKET)
	{
		Token tok = getToken();

		std::auto_ptr<Object> num1;
		if(hasTokens() && peekToken().getType() != T_COLON)
			num1.reset(parseExpression());

		if(hasTokens() && peekToken().getType() == T_RBRACKET)
		{
			getToken();
			std::auto_ptr<Select> result(new Select(expr.release(), num1.release()));
			result->setLineNumber(tok.getLineNumber());
			result->setColumnNumber(tok.getColumnNumber());
			return parseSubExpression1a(result.release());
		}

		if(!hasTokens() || peekToken().getType() != T_COLON)
			throw ParserSyntaxException(getToken(), "Expected ':' or ']'!");
		getToken();

		std::auto_ptr<Object> num2;
		if(hasTokens() && peekToken().getType() != T_RBRACKET)
			num2.reset(parseExpression());

		if(!hasTokens() || peekToken().getType() != T_RBRACKET)
			throw ParserSyntaxException(getToken(), "Expected ']'!");
		getToken();

		std::auto_ptr<Slice> result(new Slice(expr.release(), num1.release(), num2.release()));
		result->setLineNumber(tok.getLineNumber());
		result->setColumnNumber(tok.getColumnNumber());
		return parseSubExpression1a(result.release());
	}
	
	else if(hasTokens() && peekToken().getType() == T_LPAREN)
	{
		// Remove the left parentheses
		Token tok = getToken();

		// Create a new call
		std::auto_ptr<Call> procCall(new Call());
		procCall->setLineNumber(expr->getLineNumber());
		procCall->setColumnNumber(expr->getColumnNumber());

		// Set the identifier of the call
		procCall->setIdentifier(expr.release());

		// Loop through the list of arguments and add them to a NodeList
		while(hasTokens() && peekToken().getType() != T_RPAREN)
		{
			// Look for an in-out symbol
			bool isInOut = false;
			if(hasTokens() && peekToken().getType() == T_LESSEQ)
			{
				getToken();
				isInOut = true;
			}
			else if(hasTokens() && peekToken().getType() == T_EQGREAT)
				getToken();

			// Create a new object for the argument
			std::auto_ptr<Object> currentArg(parseExpression());

			// Store the parameter depending upon if it is in-out or not
			procCall->pushArgument(currentArg.release(), isInOut);

			if(!hasTokens() || peekToken().getType() != T_COMMA)
				break;
			getToken();
		}

		// Look for the right parentheses
		if(!hasTokens() || peekToken().getType() != T_RPAREN)
			throw ParserSyntaxException(getToken(), "Expected ')'!");
		getToken();

		return parseSubExpression1a(procCall.release());
	}

	return expr.release();
}