0030592: Draw Harness, ViewerTest - provide vbackground command unifying vsetbg,...
[occt.git] / src / ViewerTest / ViewerTest_CmdParser.cxx
CommitLineData
189f85a3 1// Created on: 2015-03-15
2// Created by: Danila ULYANOV
3// Copyright (c) 2014 OPEN CASCADE SAS
4//
5// This file is part of Open CASCADE Technology software library.
6//
7// This library is free software; you can redistribute it and/or modify it under
8// the terms of the GNU Lesser General Public License version 2.1 as published
9// by the Free Software Foundation, with special exception defined in the file
10// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11// distribution for complete text of the license and disclaimer of any warranty.
12//
13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
15
16#include <ViewerTest_CmdParser.hxx>
17
18#include <Draw.hxx>
293211ae 19#include <ViewerTest.hxx>
189f85a3 20
293211ae 21#include <algorithm>
189f85a3 22#include <iostream>
189f85a3 23
293211ae 24namespace
25{
26
27 //! Converts the given string to lowercase
28 //! @param theString the string to be converted
29 //! @return a converted string (a string in lowercase)
30 static std::string toLowerCase (std::string theString)
31 {
32 std::transform (theString.begin(), theString.end(), theString.begin(), ::LowerCase);
33 return theString;
34 }
35
36 //! Converts the vector of std::strings to a vector of pointers to its data
37 //! @param theStringList the vector of strings to be converted
38 //! @return a vector of pointers to the data of given strings
39 static std::vector<const char*> convertToRawStringList (const std::vector<std::string>& theStringList)
40 {
41 const std::size_t aListSize = theStringList.size();
42 std::vector<const char*> aRawStringList (aListSize);
43 for (std::size_t anIndex = 0; anIndex < aListSize; ++anIndex)
44 {
45 aRawStringList[anIndex] = theStringList[anIndex].c_str();
46 }
47 return aRawStringList;
48 }
49
50} // namespace
51
52const std::size_t ViewerTest_CmdParser::THE_UNNAMED_COMMAND_OPTION_KEY = (std::numeric_limits<std::size_t>::max)();
53
54const std::size_t ViewerTest_CmdParser::THE_HELP_COMMAND_OPTION_KEY = 0;
189f85a3 55
56//===============================================================================================
293211ae 57// function : ViewerTest_CmdParser
58// purpose :
189f85a3 59//===============================================================================================
293211ae 60ViewerTest_CmdParser::ViewerTest_CmdParser (const std::string& theDescription) : myDescription (theDescription)
189f85a3 61{
293211ae 62 AddOption ("help|h", "Prints a short description of the command and its options.");
189f85a3 63}
64
65//===============================================================================================
293211ae 66// function : AddOption
67// purpose :
189f85a3 68//===============================================================================================
293211ae 69ViewerTest_CommandOptionKey ViewerTest_CmdParser::AddOption (const std::string& theOptionNames,
70 const std::string& theOptionDescription)
189f85a3 71{
293211ae 72 CommandOption aNewOption;
189f85a3 73
74 // extract option names
75 std::vector<std::string> aNames;
293211ae 76 std::stringstream aStream (theOptionNames);
77 std::string anItem;
189f85a3 78 while (std::getline (aStream, anItem, '|'))
79 {
189f85a3 80 if (!anItem.empty())
81 {
82 aNames.push_back (anItem);
83 }
84 }
85
293211ae 86 aNewOption.Name = aNames.front();
87 if (aNames.size() > 1)
88 {
89 const std::size_t aNumberOfAliases = aNames.size() - 1;
90
91 aNewOption.Aliases.reserve (aNumberOfAliases);
92 std::copy (aNames.begin() + 1, aNames.end(), std::back_inserter (aNewOption.Aliases));
93 }
189f85a3 94 aNewOption.Description = theOptionDescription;
189f85a3 95
293211ae 96 const ViewerTest_CommandOptionKey aNewOptionKey = myOptionStorage.size();
97
98 myOptionStorage.push_back (aNewOption);
189f85a3 99
100 std::vector<std::string>::const_iterator anIt = aNames.begin();
101 for (; anIt != aNames.end(); ++anIt)
102 {
293211ae 103 const std::string aNameInLowerCase = toLowerCase (*anIt);
104
105 myOptionMap[aNameInLowerCase] = aNewOptionKey;
189f85a3 106 }
293211ae 107
108 return aNewOptionKey;
189f85a3 109}
110
111//===============================================================================================
293211ae 112// function : PrintHelp
113// purpose :
189f85a3 114//===============================================================================================
293211ae 115void ViewerTest_CmdParser::PrintHelp() const
189f85a3 116{
117 std::cout << myDescription << std::endl;
293211ae 118 std::vector<CommandOption>::const_iterator anIt = myOptionStorage.begin();
119 for (++anIt; anIt != myOptionStorage.end(); ++anIt)
189f85a3 120 {
293211ae 121 const CommandOption& aCommandOption = *anIt;
122 std::cout << "\n\t-" << aCommandOption.Name;
123 const OptionAliases& anAliases = aCommandOption.Aliases;
124 if (!anAliases.empty())
125 {
126 std::cout << " (-" << anAliases.front();
127 for (OptionAliases::const_iterator anAliasIterator = anAliases.begin() + 1; anAliasIterator != anAliases.end();
128 ++anAliasIterator)
129 {
130 std::cout << ", -" << *anAliasIterator;
131 }
132 std::cout << ")";
133 }
134 std::cout << " : " << aCommandOption.Description;
189f85a3 135 }
189f85a3 136 std::cout << std::endl;
137}
138
139//===============================================================================================
293211ae 140// function : Parse
141// purpose :
189f85a3 142//===============================================================================================
293211ae 143void ViewerTest_CmdParser::Parse (const Standard_Integer theArgsNb, const char* const* const theArgVec)
189f85a3 144{
293211ae 145 std::size_t aCurrentUsedOptionIndex = 0;
189f85a3 146 for (Standard_Integer anIter = 1; anIter < theArgsNb; ++anIter)
147 {
293211ae 148 const char* const anArgument = theArgVec[anIter];
149 if (anArgument[0] == '-' && !std::isdigit (anArgument[1]))
189f85a3 150 {
293211ae 151 const std::string anOptionName = toLowerCase (anArgument + 1);
152 OptionMap::iterator aMapIter = myOptionMap.find (anOptionName);
153 if (aMapIter != myOptionMap.end())
189f85a3 154 {
293211ae 155 const ViewerTest_CommandOptionKey aCurrentUsedOptionKey = aMapIter->second;
156 aCurrentUsedOptionIndex = addUsedOption (aCurrentUsedOptionKey);
189f85a3 157 }
158 else
159 {
293211ae 160 std::cerr << "Error: unknown argument '" << anOptionName << "'\n";
161 return;
189f85a3 162 }
163 }
164 else
165 {
293211ae 166 if (anIter == 1)
167 {
168 aCurrentUsedOptionIndex = addUsedOption (THE_UNNAMED_COMMAND_OPTION_KEY);
169 }
170 myOptionArgumentStorage[aCurrentUsedOptionIndex].push_back (anArgument);
189f85a3 171 }
172 }
173}
174
175//===============================================================================================
293211ae 176// function : GetOptionNameByKey
177// purpose :
189f85a3 178//===============================================================================================
293211ae 179std::string ViewerTest_CmdParser::GetOptionNameByKey (const ViewerTest_CommandOptionKey theOptionKey) const
189f85a3 180{
293211ae 181 if (theOptionKey == THE_UNNAMED_COMMAND_OPTION_KEY)
182 {
183 return "Unnamed";
184 }
185 return myOptionStorage[theOptionKey].Name;
186}
189f85a3 187
293211ae 188//===============================================================================================
189// function : GetUsedOptions
190// purpose :
191//===============================================================================================
192ViewerTest_CommandOptionKeySet ViewerTest_CmdParser::GetUsedOptions() const
193{
194 ViewerTest_CommandOptionKeySet aUsedOptions;
195 for (UsedOptionMap::const_iterator aUsedOptionMapIterator = myUsedOptionMap.begin();
196 aUsedOptionMapIterator != myUsedOptionMap.end();
197 ++aUsedOptionMapIterator)
189f85a3 198 {
293211ae 199 aUsedOptions.insert (aUsedOptionMapIterator->first);
200 }
201 return aUsedOptions;
202}
189f85a3 203
293211ae 204//===============================================================================================
205// function : HasNoOption
206// purpose :
207//===============================================================================================
208bool ViewerTest_CmdParser::HasNoOption() const
209{
210 return myUsedOptionMap.empty();
211}
212
213//===============================================================================================
214// function : HasUnnamedOption
215// purpose :
216//===============================================================================================
217bool ViewerTest_CmdParser::HasUnnamedOption() const
218{
219 return myUsedOptionMap.find (THE_UNNAMED_COMMAND_OPTION_KEY) != myUsedOptionMap.end();
220}
221
222//===============================================================================================
223// function : HasNoUnnamedOption
224// purpose :
225//===============================================================================================
226bool ViewerTest_CmdParser::HasOnlyUnnamedOption() const
227{
228 return HasUnnamedOption() && (myUsedOptionMap.size() == 1);
229}
230
231//===============================================================================================
232// function : HasOption
233// purpose :
234//===============================================================================================
235bool ViewerTest_CmdParser::HasOption (const std::string& theOptionName,
236 const std::size_t theMandatoryArgsNb /* = 0 */,
237 const bool isFatal /* = false */) const
238{
239 ViewerTest_CommandOptionKey anOptionKey;
240 if (!findOptionKey (theOptionName, anOptionKey))
241 {
242 return false;
189f85a3 243 }
293211ae 244 return HasOption (anOptionKey, theMandatoryArgsNb, isFatal);
245}
189f85a3 246
293211ae 247//===============================================================================================
248// function : HasOption
249// purpose :
250//===============================================================================================
251bool ViewerTest_CmdParser::HasOption (const ViewerTest_CommandOptionKey theOptionKey,
252 const std::size_t theMandatoryArgsNb /* = 0 */,
253 const bool isFatal /* = false */) const
254{
255 std::size_t aUsedOptionIndex = 0;
256 if (!findUsedOptionIndex (theOptionKey, aUsedOptionIndex))
257 {
258 return false;
259 }
260 const OptionArguments& anOptionArguments = myOptionArgumentStorage[aUsedOptionIndex];
261 const bool aResult = (anOptionArguments.size() >= theMandatoryArgsNb);
262 if (isFatal && !aResult)
263 {
264 std::cerr << "Error: wrong syntax at option '" << myOptionStorage[theOptionKey].Name << "'\n"
265 << "At least " << theMandatoryArgsNb << "expected, but only " << anOptionArguments.size()
266 << "provided.\n";
267 }
189f85a3 268 return aResult;
269}
270
271//===============================================================================================
293211ae 272// function : GetNumberOfOptionArguments
273// purpose :
189f85a3 274//===============================================================================================
293211ae 275Standard_Integer ViewerTest_CmdParser::GetNumberOfOptionArguments (const std::string& theOptionName) const
189f85a3 276{
293211ae 277 ViewerTest_CommandOptionKey anOptionKey = THE_UNNAMED_COMMAND_OPTION_KEY;
278 if (!findOptionKey (theOptionName, anOptionKey))
279 {
280 return 0;
281 }
282 return GetNumberOfOptionArguments (anOptionKey);
283}
189f85a3 284
293211ae 285//===============================================================================================
286// function : GetNumberOfOptionArguments
287// purpose :
288//===============================================================================================
289Standard_Integer ViewerTest_CmdParser::GetNumberOfOptionArguments (const ViewerTest_CommandOptionKey theOptionKey) const
290{
291 std::size_t aUsedOptionIndex = 0;
292 if (!findUsedOptionIndex (theOptionKey, aUsedOptionIndex))
189f85a3 293 {
293211ae 294 return false;
295 }
296 return static_cast<Standard_Integer> (myOptionArgumentStorage[aUsedOptionIndex].size());
297}
298
299//===============================================================================================
300// function : Arg
301// purpose :
302//===============================================================================================
303bool ViewerTest_CmdParser::Arg (const std::string& theOptionName,
304 const Standard_Integer theArgumentIndex,
305 std::string& theOptionArgument) const
306{
307 Standard_ASSERT_RETURN (theArgumentIndex >= 0,
308 __FUNCTION__ ": 'theArgumentIndex' must be greater than or equal to zero.",
309 false);
310 ViewerTest_CommandOptionKey anOptionKey = THE_UNNAMED_COMMAND_OPTION_KEY;
311 if (!theOptionName.empty() && !findOptionKey (theOptionName, anOptionKey))
312 {
313 return false;
314 }
315 return Arg (anOptionKey, theArgumentIndex, theOptionArgument);
316}
317
318//===============================================================================================
319// function : Arg
320// purpose :
321//===============================================================================================
322bool ViewerTest_CmdParser::Arg (const ViewerTest_CommandOptionKey theOptionKey,
323 const Standard_Integer theArgumentIndex,
324 std::string& theOptionArgument) const
325{
326 Standard_ASSERT_RETURN (theArgumentIndex >= 0,
327 __FUNCTION__ ": 'theArgumentIndex' must be greater than or equal to zero.",
328 false);
329 std::size_t aUsedOptionIndex = 0;
330 if (!findUsedOptionIndex (theOptionKey, aUsedOptionIndex))
331 {
332 return false;
333 }
334 const OptionArguments& anOptionArguments = myOptionArgumentStorage[aUsedOptionIndex];
335 if (static_cast<std::size_t> (theArgumentIndex) >= anOptionArguments.size())
336 {
337 return false;
338 }
339 theOptionArgument = anOptionArguments[theArgumentIndex];
340 return true;
341}
342
343//===============================================================================================
344// function : Arg
345// purpose :
346//===============================================================================================
347std::string ViewerTest_CmdParser::Arg (const std::string& theOptionName, const Standard_Integer theArgumentIndex) const
348{
349 Standard_ASSERT_RETURN (theArgumentIndex >= 0,
350 __FUNCTION__ ": 'theArgumentIndex' must be greater than or equal to zero.",
351 std::string());
352 std::string anOptionArgument;
353 if (!Arg (theOptionName, theArgumentIndex, anOptionArgument))
354 {
355 return std::string();
189f85a3 356 }
293211ae 357 return anOptionArgument;
358}
189f85a3 359
293211ae 360//===============================================================================================
361// function : Arg
362// purpose :
363//===============================================================================================
364std::string ViewerTest_CmdParser::Arg (const ViewerTest_CommandOptionKey theOptionKey,
365 const Standard_Integer theArgumentIndex) const
366{
367 std::string anOptionArgument;
368 if (!Arg (theOptionKey, theArgumentIndex, anOptionArgument))
369 {
370 return std::string();
371 }
372 return anOptionArgument;
189f85a3 373}
374
375//===============================================================================================
293211ae 376// function : ArgVec3f
377// purpose :
189f85a3 378//===============================================================================================
293211ae 379Graphic3d_Vec3 ViewerTest_CmdParser::ArgVec3f (const std::string& theOptionName,
380 Standard_Integer theArgumentIndex) const
189f85a3 381{
293211ae 382 return Graphic3d_Vec3 (
383 static_cast<Standard_ShortReal> (Draw::Atof (Arg (theOptionName, theArgumentIndex).c_str())),
384 static_cast<Standard_ShortReal> (Draw::Atof (Arg (theOptionName, theArgumentIndex + 1).c_str())),
385 static_cast<Standard_ShortReal> (Draw::Atof (Arg (theOptionName, theArgumentIndex + 2).c_str())));
189f85a3 386}
387
388//===============================================================================================
293211ae 389// function : ArgVec3d
390// purpose :
189f85a3 391//===============================================================================================
293211ae 392Graphic3d_Vec3d ViewerTest_CmdParser::ArgVec3d (const std::string& theOptionName,
393 Standard_Integer theArgumentIndex) const
189f85a3 394{
293211ae 395 return Graphic3d_Vec3d (Draw::Atof (Arg (theOptionName, theArgumentIndex).c_str()),
396 Draw::Atof (Arg (theOptionName, theArgumentIndex + 1).c_str()),
397 Draw::Atof (Arg (theOptionName, theArgumentIndex + 2).c_str()));
625e1958 398}
399
400//===============================================================================================
293211ae 401// function : ArgVec
402// purpose :
625e1958 403//===============================================================================================
293211ae 404gp_Vec ViewerTest_CmdParser::ArgVec (const std::string& theOptionName, Standard_Integer theArgumentIndex) const
625e1958 405{
293211ae 406 return gp_Vec (Draw::Atof (Arg (theOptionName, theArgumentIndex).c_str()),
407 Draw::Atof (Arg (theOptionName, theArgumentIndex + 1).c_str()),
408 Draw::Atof (Arg (theOptionName, theArgumentIndex + 2).c_str()));
625e1958 409}
410
411//===============================================================================================
293211ae 412// function : ArgPnt
413// purpose :
625e1958 414//===============================================================================================
293211ae 415gp_Pnt ViewerTest_CmdParser::ArgPnt (const std::string& theOptionName, Standard_Integer theArgumentIndex) const
625e1958 416{
293211ae 417 return gp_Pnt (Draw::Atof (Arg (theOptionName, theArgumentIndex).c_str()),
418 Draw::Atof (Arg (theOptionName, theArgumentIndex + 1).c_str()),
419 Draw::Atof (Arg (theOptionName, theArgumentIndex + 2).c_str()));
189f85a3 420}
421
422//===============================================================================================
293211ae 423// function : ArgDouble
424// purpose :
189f85a3 425//===============================================================================================
293211ae 426Standard_Real ViewerTest_CmdParser::ArgDouble (const std::string& theOptionName,
427 Standard_Integer theArgumentIndex) const
189f85a3 428{
625e1958 429 return Draw::Atof (Arg (theOptionName, theArgumentIndex).c_str());
189f85a3 430}
431
432//===============================================================================================
293211ae 433// function : ArgFloat
434// purpose :
189f85a3 435//===============================================================================================
293211ae 436Standard_ShortReal ViewerTest_CmdParser::ArgFloat (const std::string& theOptionName,
437 Standard_Integer theArgumentIndex) const
625e1958 438{
439 return static_cast<Standard_ShortReal> (Draw::Atof (Arg (theOptionName, theArgumentIndex).c_str()));
440}
441
442//===============================================================================================
293211ae 443// function : ArgInt
444// purpose :
625e1958 445//===============================================================================================
293211ae 446Standard_Integer ViewerTest_CmdParser::ArgInt (const std::string& theOptionName,
447 const Standard_Integer theArgumentIndex) const
625e1958 448{
449 return static_cast<Standard_Integer> (Draw::Atoi (Arg (theOptionName, theArgumentIndex).c_str()));
450}
451
452//===============================================================================================
293211ae 453// function : ArgBool
454// purpose :
625e1958 455//===============================================================================================
293211ae 456bool ViewerTest_CmdParser::ArgBool (const std::string& theOptionName, const Standard_Integer theArgumentIndex) const
189f85a3 457{
dde68833 458 return Draw::Atoi (Arg (theOptionName, theArgumentIndex).c_str()) != 0;
189f85a3 459}
293211ae 460
461//===============================================================================================
462// function : ArgColor
463// purpose :
464//===============================================================================================
465template <typename TheColor>
466bool ViewerTest_CmdParser::ArgColor (const std::string& theOptionName,
467 Standard_Integer& theArgumentIndex,
468 TheColor& theColor) const
469{
470 ViewerTest_CommandOptionKey anOptionKey;
471 if (!findOptionKey (theOptionName, anOptionKey))
472 {
473 return false;
474 }
475 return ArgColor (anOptionKey, theArgumentIndex, theColor);
476}
477
478//! ViewerTest_CmdParser::ArgColor() explicit template instantiation definitions
479template bool ViewerTest_CmdParser::ArgColor (const std::string& theOptionName,
480 Standard_Integer& theArgumentIndex,
481 Quantity_Color& theColor) const;
482
483template bool ViewerTest_CmdParser::ArgColor (const std::string& theOptionName,
484 Standard_Integer& theArgumentIndex,
485 Quantity_ColorRGBA& theColor) const;
486
487//===============================================================================================
488// function : ArgColor
489// purpose :
490//===============================================================================================
491template <typename TheColor>
492bool ViewerTest_CmdParser::ArgColor (const ViewerTest_CommandOptionKey theOptionKey,
493 Standard_Integer& theArgumentIndex,
494 TheColor& theColor) const
495{
496 std::size_t aUsedOptionIndex = 0;
497 if (!findUsedOptionIndex (theOptionKey, aUsedOptionIndex))
498 {
499 return false;
500 }
501 const RawStringArguments aRawStringArguments = getRawStringArguments (aUsedOptionIndex);
502 const Standard_Integer aNumberOfArguments = static_cast<Standard_Integer> (aRawStringArguments.size());
503 Standard_ASSERT_RETURN (theArgumentIndex < aNumberOfArguments,
504 __FUNCTION__ ": 'theArgumentIndex' must be less than the number of command-line arguments "
505 "passed with the option which access key is 'theOptionKey'.",
506 false);
507 const Standard_Integer aNumberOfAvailableArguments = aNumberOfArguments - theArgumentIndex;
508 TheColor aColor;
509 const Standard_Integer aNumberOfParsedArguments = ViewerTest::ParseColor (aNumberOfAvailableArguments,
510 &aRawStringArguments[theArgumentIndex],
511 aColor);
512 if (aNumberOfParsedArguments == 0)
513 {
514 return false;
515 }
516 theArgumentIndex += aNumberOfParsedArguments;
517 theColor = aColor;
518 return true;
519}
520
521//! ViewerTest_CmdParser::ArgColor() explicit template instantiation definitions
522template bool ViewerTest_CmdParser::ArgColor (ViewerTest_CommandOptionKey theOptionKey,
523 Standard_Integer& theArgumentIndex,
524 Quantity_Color& theColor) const;
525
526template bool ViewerTest_CmdParser::ArgColor (ViewerTest_CommandOptionKey theOptionKey,
527 Standard_Integer& theArgumentIndex,
528 Quantity_ColorRGBA& theColor) const;
529
530//===============================================================================================
531// function : findUsedOptionKey
532// purpose :
533//===============================================================================================
534bool ViewerTest_CmdParser::findOptionKey (const std::string& theOptionName,
535 ViewerTest_CommandOptionKey& theOptionKey) const
536{
537 const std::string anOptionNameInLowercase = toLowerCase (theOptionName);
538 const OptionMap::const_iterator aMapIter = myOptionMap.find (anOptionNameInLowercase);
539 if (aMapIter == myOptionMap.end())
540 {
541 return false;
542 }
543 theOptionKey = aMapIter->second;
544 return true;
545}
546
547//===============================================================================================
548// function : findUsedOptionKey
549// purpose :
550//===============================================================================================
551bool ViewerTest_CmdParser::findUsedOptionIndex (const ViewerTest_CommandOptionKey theOptionKey,
552 std::size_t& theUsedOptionIndex) const
553{
554 const UsedOptionMap::const_iterator aUsedOptionIterator = myUsedOptionMap.find (theOptionKey);
555 if (aUsedOptionIterator == myUsedOptionMap.end())
556 {
557 return false;
558 }
559 theUsedOptionIndex = aUsedOptionIterator->second;
560 return true;
561}
562
563//===============================================================================================
564// function : findUsedOptionIndex
565// purpose :
566//===============================================================================================
567bool ViewerTest_CmdParser::findUsedOptionIndex (const std::string& theOptionName, std::size_t& theUsedOptionIndex) const
568{
569 ViewerTest_CommandOptionKey anOptionKey = THE_UNNAMED_COMMAND_OPTION_KEY;
570 if (!findOptionKey (theOptionName, anOptionKey))
571 {
572 return false;
573 }
574 std::size_t aUsedOptionIndex = 0;
575 if (!findUsedOptionIndex (anOptionKey, aUsedOptionIndex))
576 {
577 return false;
578 }
579 theUsedOptionIndex = aUsedOptionIndex;
580 return true;
581}
582
583//===============================================================================================
584// function : addUsedOption
585// purpose :
586//===============================================================================================
587std::size_t ViewerTest_CmdParser::addUsedOption (const ViewerTest_CommandOptionKey theNewUsedOptionKey)
588{
589 const std::size_t aNewUsedOptionIndex = myOptionArgumentStorage.size();
590 myOptionArgumentStorage.push_back (OptionArguments());
591 myUsedOptionMap[theNewUsedOptionKey] = aNewUsedOptionIndex;
592 return aNewUsedOptionIndex;
593}
594
595//===============================================================================================
596// function : getRawStringArguments
597// purpose :
598//===============================================================================================
599ViewerTest_CmdParser::RawStringArguments ViewerTest_CmdParser::getRawStringArguments (
600 const std::size_t theUsedOptionIndex) const
601{
602 Standard_ASSERT_RETURN (
603 theUsedOptionIndex < myOptionArgumentStorage.size(),
604 __FUNCTION__ ": 'theUsedOptionIndex' must be less than the size of 'myOptionArgumentStorage'.",
605 RawStringArguments());
606 const OptionArguments& anOptionArguments = myOptionArgumentStorage[theUsedOptionIndex];
607 return convertToRawStringList (anOptionArguments);
608}