Eclipse SUMO - Simulation of Urban MObility
OptionsCont.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
21 // A storage for options (typed value containers)
22 /****************************************************************************/
23 #pragma once
24 #include <config.h>
25 
26 #include <map>
27 #include <string>
28 #include <vector>
29 #include <iostream>
30 #include "Option.h"
31 
32 
33 // ===========================================================================
34 // class definitions
35 // ===========================================================================
89 class OptionsCont {
90 
91 public:
93  static OptionsCont& getOptions();
94 
97 
99  OptionsCont();
100 
102  ~OptionsCont();
103 
106 
112  void setApplicationName(const std::string& appName, const std::string& fullName);
113 
118  void setApplicationDescription(const std::string& appDesc);
119 
125  void addCallExample(const std::string& example, const std::string& desc);
126 
131  void setAdditionalHelpMessage(const std::string& add);
132 
137  void addCopyrightNotice(const std::string& copyrightLine);
138 
141  void clearCopyrightNotices();
142 
151  void addOptionSubTopic(const std::string& topic);
152 
157  void printHelp(std::ostream& os);
158 
164  void printHelpOnTopic(const std::string& topic, int tooLarge, int maxSize, std::ostream& os);
165 
177  void writeConfiguration(std::ostream& os, const bool filled,
178  const bool complete, const bool addComments, const std::string& relativeTo = "",
179  const bool forceRelative = false, const bool inComment = false) const;
180 
188  void writeSchema(std::ostream& os);
189 
198  void writeXMLHeader(std::ostream& os, const bool includeConfig = true) const;
199 
201 
204 
210  void doRegister(const std::string& name, Option* o);
211 
221  void doRegister(const std::string& name, char abbr, Option* o);
222 
239  void addSynonyme(const std::string& name1, const std::string& name2, bool isDeprecated = false);
240 
246  void addXMLDefault(const std::string& name, const std::string& xmlRoot = "");
247 
261  void addDescription(const std::string& name, const std::string& subtopic, const std::string& description);
262 
274  void setFurtherAttributes(const std::string& name, const std::string& subtopic, bool required, bool positional, const std::string& listSep);
275 
289  void addCategory(const std::string& name, const std::string& subtopic, const std::string& category);
290 
292 
295 
299  bool exists(const std::string& name) const;
300 
316  bool isSet(const std::string& name, bool failOnNonExistant = true) const;
317 
331  bool isDefault(const std::string& name) const;
332 
342  bool isBool(const std::string& name) const;
343 
361  bool isUsableFileList(const std::string& name) const;
362 
373  bool checkDependingSuboptions(const std::string& name, const std::string& prefix) const;
374 
382  void relocateFiles(const std::string& configuration) const;
383 
393  std::vector<std::string> getSynonymes(const std::string& name) const;
394 
401  const std::string& getDescription(const std::string& name) const;
402 
409  const std::string& getSubTopic(const std::string& name) const;
410 
422  bool isWriteable(const std::string& name);
423 
425 
428 
439  std::string getValueString(const std::string& name) const;
440 
451  std::string getString(const std::string& name) const;
452 
463  double getFloat(const std::string& name) const;
464 
475  int getInt(const std::string& name) const;
476 
487  bool getBool(const std::string& name) const;
488 
499  const IntVector& getIntVector(const std::string& name) const;
500 
516  const StringVector& getStringVector(const std::string& name) const;
517 
535  bool isInStringVector(const std::string& optionName, const std::string& itemName) const;
536 
538 
541 
561  bool set(const std::string& name, const std::string& value, const bool append = false);
562 
582  bool setDefault(const std::string& name, const std::string& value);
583 
596  bool setByRootElement(const std::string& name, const std::string& value);
597 
599 
606  void resetWritable();
607 
609  void resetDefault();
610 
612  void resetDefault(const std::string& name);
613 
622  friend std::ostream& operator<<(std::ostream& os, const OptionsCont& oc);
623 
625  void clear();
626 
643  bool processMetaOptions(bool missingOptions);
644 
646  const std::vector<std::string>& getSubTopics() const;
647 
649  std::vector<std::string> getSubTopicsEntries(const std::string& subtopic) const;
650 
652  std::string getTypeName(const std::string name);
653 
655  const std::string& getFullName() const;
656 
658  bool isEmpty() const;
659 
661  std::vector<std::pair<std::string, Option*> >::const_iterator begin() const;
662 
664  std::vector<std::pair<std::string, Option*> >::const_iterator end() const;
665 
666 private:
674  Option* getSecure(const std::string& name) const;
675 
683  void reportDoubleSetting(const std::string& arg) const;
684 
692  std::string convertChar(char abbr) const;
693 
705  void splitLines(std::ostream& os, std::string what, int offset, int nextOffset);
706 
709 
711  std::vector<std::pair<std::string, Option*> > myAddresses;
712 
714  std::map<std::string, Option*> myValues;
715 
718 
720  std::vector< std::pair<std::string, std::string> > myCallExamples;
721 
723  std::vector<std::string> mySubTopics, myCopyrightNotices;
724 
726  std::map<std::string, std::vector<std::string> > mySubTopicEntries;
727 
729  std::map<std::string, std::string> myXMLDefaults;
730 
732  mutable std::map<std::string, bool> myDeprecatedSynonymes;
733 
735  OptionsCont(const OptionsCont& s) = delete;
736 
738  OptionsCont& operator=(const OptionsCont& s) = delete;
739 };
std::vector< std::string > StringVector
Definition of a vector of strings.
Definition: Option.h:42
std::vector< int > IntVector
Definition of a vector of ints.
Definition: Option.h:37
A class representing a single program option.
Definition: Option.h:72
A storage for options typed value containers)
Definition: OptionsCont.h:89
void setAdditionalHelpMessage(const std::string &add)
Sets an additional message to be printed at the begin of the help screen.
~OptionsCont()
Destructor.
Definition: OptionsCont.cpp:70
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
void resetDefault()
Resets all options to default.
void setFurtherAttributes(const std::string &name, const std::string &subtopic, bool required, bool positional, const std::string &listSep)
mark option as required
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
std::vector< std::pair< std::string, std::string > > myCallExamples
list of call examples
Definition: OptionsCont.h:720
OptionsCont(const OptionsCont &s)=delete
invalid copy constructor
bool isWriteable(const std::string &name)
Returns the information whether the named option may be set.
std::map< std::string, std::vector< std::string > > mySubTopicEntries
A map from subtopic to option.
Definition: OptionsCont.h:726
void writeXMLHeader(std::ostream &os, const bool includeConfig=true) const
Writes a standard XML header, including the configuration.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
void splitLines(std::ostream &os, std::string what, int offset, int nextOffset)
Writes the given string 'formatted'.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
void addCategory(const std::string &name, const std::string &subtopic, const std::string &category)
Adds a category for an option.
void printHelpOnTopic(const std::string &topic, int tooLarge, int maxSize, std::ostream &os)
Prints help on the given topic.
const std::string & getSubTopic(const std::string &name) const
Returns the option category.
std::map< std::string, Option * > myValues
option maps sorted by name (for adresses AND their synonyms)
Definition: OptionsCont.h:714
bool isEmpty() const
check if options container is empty
std::string myAdditionalMessage
Definition: OptionsCont.h:717
std::vector< std::string > myCopyrightNotices
Definition: OptionsCont.h:723
const std::vector< std::string > & getSubTopics() const
return the list of subtopics
std::vector< std::pair< std::string, Option * > > myAddresses
option-adresses
Definition: OptionsCont.h:711
const IntVector & getIntVector(const std::string &name) const
Returns the list of integer-value of the named option (only for Option_IntVector)
std::vector< std::string > getSynonymes(const std::string &name) const
Returns the synonymes of an option name.
void reportDoubleSetting(const std::string &arg) const
Reports an error that the option has already been set.
std::vector< std::string > mySubTopics
lists of option subtopics and copyright notices
Definition: OptionsCont.h:723
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static OptionsCont EMPTY_OPTIONS
empty option container
Definition: OptionsCont.h:96
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
bool setDefault(const std::string &name, const std::string &value)
Sets the given value for the named option as new default value.
void doRegister(const std::string &name, Option *o)
Adds an option under the given name.
Definition: OptionsCont.cpp:76
bool exists(const std::string &name) const
Returns the information whether the named option is known.
const std::string & getFullName() const
get options full name
bool isBool(const std::string &name) const
Returns the information whether the option is a boolean option.
void addCopyrightNotice(const std::string &copyrightLine)
Adds a copyright notice to the help output.
std::string getTypeName(const std::string name)
return the type name for the given option
void writeSchema(std::ostream &os)
Writes the xml schema for the configuration.
void clear()
Removes all information from the container.
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
std::vector< std::pair< std::string, Option * > >::const_iterator begin() const
get begin adresses iterator
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false) const
Writes the configuration.
void clearCopyrightNotices()
Removes all copyright information.
std::string convertChar(char abbr) const
Converts an abbreviation into a name.
void addOptionSubTopic(const std::string &topic)
Adds an option subtopic.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
OptionsCont()
Constructor.
Definition: OptionsCont.cpp:65
void printHelp(std::ostream &os)
Prints the help.
std::vector< std::pair< std::string, Option * > >::const_iterator end() const
get begin adresses iterator
std::string getValueString(const std::string &name) const
Returns the string-value of the named option (all options)
std::string myAppDescription
Definition: OptionsCont.h:717
const std::string & getDescription(const std::string &name) const
Returns the option description.
bool setByRootElement(const std::string &name, const std::string &value)
Sets the given value for the option which can handle the given XML root.
std::map< std::string, bool > myDeprecatedSynonymes
A map from deprecated options to a bool indicating whether we warned about deprecation.
Definition: OptionsCont.h:732
static OptionsCont myOptions
The static options container used.
Definition: OptionsCont.h:708
bool checkDependingSuboptions(const std::string &name, const std::string &prefix) const
Checks whether an option is set, which has options with a prefix depending on it.
std::map< std::string, std::string > myXMLDefaults
A map from XML root element to option.
Definition: OptionsCont.h:729
std::string myAppName
some information on the application
Definition: OptionsCont.h:717
void resetWritable()
Resets all options to be writeable.
OptionsCont & operator=(const OptionsCont &s)=delete
invalid assignment operator
void addXMLDefault(const std::string &name, const std::string &xmlRoot="")
Adds an XML root element to handle by default. The special root "" denotes the default handler.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:60
std::string myFullName
Definition: OptionsCont.h:717
std::vector< std::string > getSubTopicsEntries(const std::string &subtopic) const
return the list of entries for the given subtopic
Option * getSecure(const std::string &name) const
Returns the named option.
void relocateFiles(const std::string &configuration) const
Modifies file name options according to the configuration path.
bool isInStringVector(const std::string &optionName, const std::string &itemName) const
Returns the named option is a list of string values containing the specified item.
bool processMetaOptions(bool missingOptions)
Checks for help and configuration output, returns whether we should exit.
bool isUsableFileList(const std::string &name) const
Checks whether the named option is usable as a file list (with at least a single file)
void addCallExample(const std::string &example, const std::string &desc)
Add a call example.
friend std::ostream & operator<<(std::ostream &os, const OptionsCont &oc)
Output operator.