MoochoPack: Miscellaneous Utilities for MOOCHO
Version of the Day
|
Extracts options from a text stream and then allows convenient access to them. More...
#include <OptionsFromStreamPack_OptionsFromStream.hpp>
Classes | |
class | InputStreamError |
Thrown if there is an input error. More... | |
Public Member Functions | |
void | print_options (std::ostream &out) const |
Print the options to an output stream. More... | |
Static Public Member Functions | |
static bool | options_group_exists (const options_group_t &options_group) |
Public Types | |
typedef OptionsFromStreamUtilityPack::options_group_map_t::iterator | iterator |
const iterator through options group access options More... | |
typedef OptionsFromStreamUtilityPack::options_group_map_t::const_iterator | const_iterator |
non-const iterator through options group access options More... | |
typedef OptionsFromStreamUtilityPack::OptionsGroup | options_group_t |
{OptionsGroup} typedef More... | |
Constructors / Initializes. | |
The default constructor, copy constructor and assignment operator functions are allowed. | |
OptionsFromStream () | |
Construct with no options set. More... | |
OptionsFromStream (std::istream &in) | |
Construct initialized from a text stream. More... | |
void | clear_options () |
Clear all the options. More... | |
void | read_options (std::istream &in) |
Add / modify options read in from a text stream. More... | |
Get an options group access object given its name. | |
If the option group does not exist then\ | |
options_group_t | options_group (const std::string &options_group_name) |
const options_group_t | options_group (const std::string &options_group_name) const |
Determine what options groups where not accessed. | |
The only the options groups accessed through the this->options_group(...) functions are maked as accessed. When the options groups are accessed through the iterator access, it is assumed that the client will not need this other information. Note that all of the flags are false by default. | |
void | reset_unaccessed_options_groups () |
Reset the flags to false for if the options groups was accessed. More... | |
void | print_unaccessed_options_groups (std::ostream &out) const |
Print a list of options groups never accessed (accessed flag is falsed). More... | |
Iterator access to options groups. | |
int | num_options_groups () const |
iterator | begin () |
iterator | end () |
const_iterator | begin () const |
const_iterator | end () const |
Extracts options from a text stream and then allows convenient access to them.
The basic idea is that options are read in from a stream (which can be a file, C++ string etc.) and then parsed and stored in a format so that options can be efficiently looked up by client software.
The syntax for the file (or any C++ istream) is as follows:
begin_options *** These are my solver options options_group MySolverOptions { tol = 1e-5; *** Convergence tolerance max_iter = 100; *** Maximum number of iterations prob_type = LINEAR; *prob_type = NON_LINEAR; *** Comment this line out } *** Options for another solver options_group YourSolverOptions { tol = 1e-4; *** These options determine the type of problem solved * type_prob = LP; type_prob = QP; } *** Reset the tolerance options_group MySolverOptions { tol = 1e-8; *** Reset to a tighter tolerance } end_options
The text stream will be read up to the end_options
line. Options groups will be read starting with the begin_options
line. Options groups can not be nested. The names for the option groups or the option names themselves can not contain any white space. The text for the option values however can contain white space. The =
must separate each option from its value. The value for an option begins with the first non-whitespace character after the =
and ends with the last non-whitespace character before the ;
. For the option and value pair "tol = + 1e-5 ;" the option value would be stored as "+ 1e-5". Comment lines starting with *
can be placed anywhere in the stream and will be ignored. Also comments starting with *
after the ;
for an option and value pair can occur on the same line as shown above.
Warning! Do not use the char '}' in any comment within an options group! This will break the parser.
The options groups are also reentrant which means that they may be included more than once as shown above. Therefore options may be set and reset in the same or another declaration of the options groups. In the above example, the second declaration of the options group declaration for OptionsGroup1
resets the value of OptionsGroup1::option1
from value1
to another_value
. This feature provides much more flexibility in letting options be changed easily without having to edit the text stream before it is read in.
Now, what if the user misspells an options group name? One strategy is to require that the options group exist and then for the client to throw exceptions if the options group does not exist. However, where will be occasions where and options group may be "optional" and you don't want the user to have to specify every options group. Therefore we don't want to make all of the options groups mandatory. However, what if a user thinks he/she is setting options in an "optional" options group but misspells the name of the options group? In this case the options group would never be read by the client software and the user may be perplexed as to why nothing changed. To help deal with this problem, after all of the option groups have been accessed, the client can call the function print_unaccessed_options_groups(...)
to print the list of options groups that have not been accessed. This way the user can see if they may have not spelled and "optional" options group correctly.
Careful use of this simple class for specifying and setting options has the following advantages/features:
Definition at line 422 of file OptionsFromStreamPack_OptionsFromStream.hpp.
typedef OptionsFromStreamUtilityPack::options_group_map_t::iterator OptionsFromStreamPack::OptionsFromStream::iterator |
const iterator through options group access options
Definition at line 429 of file OptionsFromStreamPack_OptionsFromStream.hpp.
typedef OptionsFromStreamUtilityPack::options_group_map_t::const_iterator OptionsFromStreamPack::OptionsFromStream::const_iterator |
non-const iterator through options group access options
Definition at line 431 of file OptionsFromStreamPack_OptionsFromStream.hpp.
typedef OptionsFromStreamUtilityPack::OptionsGroup OptionsFromStreamPack::OptionsFromStream::options_group_t |
{OptionsGroup} typedef
Definition at line 434 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inline |
Construct with no options set.
Definition at line 641 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inlineexplicit |
Construct initialized from a text stream.
This is equivalent to calling the default constructor and then calling read_options(in)
.
Definition at line 645 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inline |
Clear all the options.
Definition at line 650 of file OptionsFromStreamPack_OptionsFromStream.hpp.
void OptionsFromStreamPack::OptionsFromStream::read_options | ( | std::istream & | in | ) |
Add / modify options read in from a text stream.
The format of the text stream is described in the introduction.
The options read in from in
will either be added anew or will overwrite options already present.
If the format of the stream is not correct then a InputStreamError
exception will be thrown.
Warning! Do not use the char '}' in any comment within an options group! This will break the parser.
Definition at line 126 of file OptionsFromStreamPack_OptionsFromStream.cpp.
void OptionsFromStreamPack::OptionsFromStream::print_options | ( | std::ostream & | out | ) | const |
Print the options to an output stream.
This is useful for debugging and also to record exactly what options have been set.
Definition at line 228 of file OptionsFromStreamPack_OptionsFromStream.cpp.
OptionsFromStream::options_group_t OptionsFromStreamPack::OptionsFromStream::options_group | ( | const std::string & | options_group_name | ) |
Definition at line 89 of file OptionsFromStreamPack_OptionsFromStream.cpp.
const OptionsFromStream::options_group_t OptionsFromStreamPack::OptionsFromStream::options_group | ( | const std::string & | options_group_name | ) | const |
Definition at line 100 of file OptionsFromStreamPack_OptionsFromStream.cpp.
|
inlinestatic |
Definition at line 655 of file OptionsFromStreamPack_OptionsFromStream.hpp.
void OptionsFromStreamPack::OptionsFromStream::reset_unaccessed_options_groups | ( | ) |
Reset the flags to false for if the options groups was accessed.
Definition at line 110 of file OptionsFromStreamPack_OptionsFromStream.cpp.
void OptionsFromStreamPack::OptionsFromStream::print_unaccessed_options_groups | ( | std::ostream & | out | ) | const |
Print a list of options groups never accessed (accessed flag is falsed).
Definition at line 117 of file OptionsFromStreamPack_OptionsFromStream.cpp.
|
inline |
Definition at line 661 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inline |
Definition at line 666 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inline |
Definition at line 671 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inline |
Definition at line 676 of file OptionsFromStreamPack_OptionsFromStream.hpp.
|
inline |
Definition at line 681 of file OptionsFromStreamPack_OptionsFromStream.hpp.