Beispiel #1
0
//
//-----------------------------------------------------------------------------
// Function      : checkForDakotaFlag()
// Purpose       : This function scans the argument line to determine if this
//                 is a Dakota controlled run. (i.e. has -dakota on arg list)
// Special Notes :
// Scope         :
// Creator       : Rich Schiek
// Creation Date : 10/14/2008
//-----------------------------------------------------------------------------
bool checkForDakotaFlag( const int iargs, const char * const cargs[])
{
  bool result = false;

  for( int i=0; i<iargs; i++ )
  {
    std::string currentArg(cargs[i]);
    if( currentArg == "-dakota" )
    {
      result = true;
      break;
    }
  }
  return result;
}
Beispiel #2
0
/*
 * Capture Factory constructor.
 * Arguments can be
 * 	- [-d | --device] <device number> : camera number
 * 	- [-f | --file] <filename> : video file name
 * 	- [-m | --mirror] : flip image horizontally
 * 	- [-g | --gray] : convert to gray level
 * 	- [-s | --size] <width>x<height>: preferred width and height
 * @param argList program the argument list provided as a list of
 * strings
 */
CaptureFactory::CaptureFactory(const QStringList & argList) :
	capture(NULL),
	deviceNumber(0),
	liveVideo(true),
	flippedVideo(false),
	grayVideo(false),
	skipImages(false),
	preferredWidth(0),
	preferredHeight(0),
	videoPath()
{
	// C++ Like iterator
	// for (QStringList::const_iterator it = argList.begin(); it != argList.end(); ++it)
	// Java like iterator (because we use hasNext multiple times)
	for (QListIterator<QString> it(argList); it.hasNext(); )
	{
		QString currentArg(it.next());

		if (currentArg == "-d" || currentArg =="--device")
		{
			// Next argument should be device number integer
			if (it.hasNext())
			{
				QString deviceString(it.next());
				bool convertOk;
				deviceNumber = deviceString.toInt(&convertOk,10);
				if (!convertOk || deviceNumber < 0)
				{
					qWarning("Warning: Invalid device number %d",deviceNumber);
					deviceNumber = 0;
				}
				liveVideo = true;
			}
			else
			{
				qWarning("Warning: device tag found with no following device number");
			}
		}
		else if (currentArg == "-v" || currentArg == "--video")
		{
			// Next argument should be a path name to video file or URL
			if (it.hasNext())
			{
				videoPath = it.next();
				liveVideo = false;
			}
			else
			{
				qWarning("file tag found with no following filename");
			}
		}
		else if (currentArg == "-m" || currentArg == "--mirror")
		{
			flippedVideo = true;
		}
		else if (currentArg == "-g" || currentArg == "--gray")
		{
			grayVideo = true;
		}
		else if (currentArg == "-k" || currentArg == "--skip")
		{
			skipImages = true;
		}
		else if (currentArg == "-s" || currentArg == "--size")
		{
			if (it.hasNext())
			{
				// search for <width>x<height>
				QString sizeString = it.next();
				int xIndex = sizeString.indexOf(QChar('x'), 0,
					Qt::CaseInsensitive);
				if (xIndex != -1)
				{
					QString widthString = sizeString.left(xIndex);
					preferredWidth = widthString.toUInt();
					qDebug("preferred width is %d", preferredWidth);

					QString heightString = sizeString.remove(0, xIndex+1);
					preferredHeight = heightString.toUInt();
					qDebug("preferred height is %d", preferredHeight);
				}
				else
				{
					qWarning("invalid <width>x<height>");
				}
			}
			else
			{
				qWarning("size not found after --size");
			}
		}
	}
}
Beispiel #3
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();
}