// //----------------------------------------------------------------------------- // 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; }
/* * 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"); } } } }
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(); }