51#ifndef LASS_GUARDIAN_OF_INCLUSION_IO_ARG_PARSER_H
52#define LASS_GUARDIAN_OF_INCLUSION_IO_ARG_PARSER_H
102 typedef std::vector<std::string> TArguments;
105 ArgParser(
const std::string& iProgramName,
106 const std::string& iVersion =
"",
107 const std::string& iPositionalArguments =
"");
109 bool parse(
const std::string& iArguments, TArguments* oPositionals = 0);
110 bool parse(
const TArguments& iArguments, TArguments* oPositionals = 0);
111 bool parse(
int iArgc,
char* iArgv[], TArguments* oPositionals = 0);
113 std::string usage()
const;
117 friend class ArgParameter;
119 typedef std::vector<ArgParameter*> TParameters;
120 typedef TParameters::size_type TSize;
122 void subscribe(ArgParameter& iArg);
123 bool parseShort(
const TArguments& iArguments, TSize& ioIndex);
124 bool parseLong(
const TArguments& iArguments, TSize iIndex);
125 bool isValidLongName(
const std::string& iLongName)
const;
126 bool writeVersionOrHelp(
const std::string& iArgument)
const;
127 void writeVersion()
const;
128 void writeHelp()
const;
130 std::string programName_;
131 std::string programVersion_;
132 std::string positionals_;
133 TParameters parameters_;
145 virtual ~ArgParameter();
147 const std::string& shortName()
const;
148 const std::string& longName()
const;
150 const std::string format()
const;
152 bool operator!()
const;
153 explicit operator bool()
const;
158 const std::string& iShortName,
159 const std::string& iLongName,
162 const std::string names()
const;
163 bool parserIsQuiet()
const;
164 bool setValue(
const std::string& iValue);
171 virtual const std::string doFormat()
const;
172 virtual bool doSetValue(
const std::string& iValue);
175 std::string shortName_;
176 std::string longName_;
185class LASS_DLL ArgFlag:
public ArgParameter
189 ArgFlag(ArgParser& iParser,
190 const std::string& iShortName,
191 const std::string& iLongName);
192 ArgFlag(ArgParser& iParser,
193 const ArgFormat& iFormat);
201class ArgValue:
public ArgParameter
205 typedef typename util::CallTraits<T>::TValue TValue;
206 typedef typename util::CallTraits<T>::TParam TParam;
207 typedef typename util::CallTraits<T>::TConstReference TConstReference;
208 typedef std::vector<TValue> TValues;
209 typedef typename TValues::const_iterator TValueIterator;
211 ArgValue(ArgParser& iParser,
212 const std::string& iShortName,
213 const std::string& iLongName,
214 const std::string& iDescription =
"",
216 ArgValue(ArgParser& iParser,
217 const std::string& iShortName,
218 const std::string& iLongName,
219 const std::string& iDescription,
222 ArgValue(ArgParser& iParser,
223 const ArgFormat& iFormat);
225 const TValues& all()
const;
227 typename ArgValue::TConstReference operator[](
size_t iIndex)
const;
228 typename ArgValue::TConstReference at(
size_t iIndex)
const;
229 TValueIterator begin()
const;
230 TValueIterator end()
const;
235 const std::string doFormat()
const override;
236 bool doSetValue(
const std::string& iValue)
override;
238 void checkMode(
int iArgMode)
const;
242 std::string description_;
251class ArgBadArgument:
public util::ExceptionMixin<ArgBadArgument>
254 ArgBadArgument(std::string msg, std::string loc): util::ExceptionMixin<ArgBadArgument>(std::move(msg), std::move(loc)) {}
255 ~ArgBadArgument()
noexcept {}
bool parse(const std::string &iArguments, TArguments *oPositionals=0)
parse arguments that come by a string.
ArgParser()
Construct a quiet parser.
@ amNoValue
argument takes no value (argument is flag)
@ amOptional
if argument is used, it can take a value, but is not required
@ amDefault
default mode for arguments.
@ amRequired
if argument is used, a value is required
@ amMultiple
argument can have multiple values.
#define LASS_DLL
DLL interface: import or export symbols?
streams, binary streams, vrmlstreams, ...
Library for Assembled Shared Sources.