diff --git a/applications/test/List/ListTest.C b/applications/test/List/ListTest.C index d06c65d98a..0fee9a9e3b 100644 --- a/applications/test/List/ListTest.C +++ b/applications/test/List/ListTest.C @@ -50,6 +50,8 @@ int main(int argc, char *argv[]) argList::validOptions.insert("reList", "reList"); argList::validOptions.insert("wordList", "wordList"); argList::validOptions.insert("stringList", "stringList"); + argList::validOptions.insert("float", "xx"); + argList::validOptions.insert("flag", ""); # include "setRootCase.H" @@ -84,19 +86,31 @@ int main(int argc, char *argv[]) stringList sLst; - if (args.options().found("reList")) + scalar xxx(-1); + + if (args.optionFound("flag")) { - reLst = readList(IStringStream(args.options()["reList"])()); + Info<<"-flag:" << args.option("flag") << endl; } - if (args.options().found("wordList")) + if (args.optionReadIfPresent("float", xxx)) { - wLst = readList(IStringStream(args.options()["wordList"])()); + Info<<"read float " << xxx << endl; } - if (args.options().found("stringList")) + if (args.optionFound("reList")) { - sLst = readList(IStringStream(args.options()["stringList"])()); + reLst = args.optionReadList("reList"); + } + + if (args.optionFound("wordList")) + { + wLst = args.optionReadList("wordList"); + } + + if (args.optionFound("stringList")) + { + sLst = args.optionReadList("stringList"); } Info<< nl diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H index c5fcf5d53c..9fdb0bb6d2 100644 --- a/src/OpenFOAM/global/argList/argList.H +++ b/src/OpenFOAM/global/argList/argList.H @@ -56,10 +56,10 @@ Description global case (same for serial and parallel jobs). Note - - Adjustment of the valid (mandatory) arguments by directly manipulating - the static member argList::validArgs. - - Adjustment of the valid options by directly manipulating - the static member argList::validOptions. + - Adjustment of the valid (mandatory) arguments + by directly manipulating the static member argList::validArgs. + - Adjustment of the valid options + by directly manipulating the static member argList::validOptions. SourceFiles argList.C @@ -76,6 +76,7 @@ SourceFiles #include "word.H" #include "fileName.H" #include "parRun.H" +#include "IStringStream.H" #include "sigFpe.H" #include "sigInt.H" @@ -165,22 +166,6 @@ public: // Access - //- Return arguments - const stringList& args() const - { - return args_; - } - - //- Return additionl arguments, - // i.e. those additional to the executable itself - stringList::subList additionalArgs() const; - - //- Return options - const Foam::HashTable& options() const - { - return options_; - } - //- Name of executable const word& executable() const { @@ -211,6 +196,72 @@ public: return rootPath()/caseName(); } + //- Return arguments + const stringList& args() const + { + return args_; + } + + //- Return additionl arguments, + // i.e. those additional to the executable itself + stringList::subList additionalArgs() const; + + //- Return options + const Foam::HashTable& options() const + { + return options_; + } + + //- Return the argument string associated with the named option + const string& option(const word& opt) const + { + return options_.operator[](opt); + } + + //- Return true if the named option is found + bool optionFound(const word& opt) const + { + return options_.found(opt); + } + + //- Return an IStringStream to the named option + IStringStream optionLookup(const word& opt) const + { + return IStringStream(option(opt)); + } + + //- Read a value from the named option + template + T optionRead(const word& opt) const + { + T val; + optionLookup(opt)() >> val; + return val; + } + + //- Read a value from the named option if present. + // Return true if the named option was found. + template + bool optionReadIfPresent(const word& opt, T& val) const + { + if (optionFound(opt)) + { + optionLookup(opt)() >> val; + return true; + } + else + { + return false; + } + } + + //- Read a List of values from the named option + template + List optionReadList(const word& opt) const + { + return readList(optionLookup(opt)()); + } + // Edit