123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #ifndef CONFIG_H
- #define CONFIG_H
- #include <string>
- #include <boost/program_options/options_description.hpp>
- #include <boost/program_options/variables_map.hpp>
- /**
- * Functions to parse and store i2pd parameters
- *
- * General usage flow:
- * Init() -- early as possible
- * ParseCmdline() -- somewhere close to main()
- * ParseConfig() -- after detecting path to config
- * Finalize() -- right after all Parse*() functions called
- * GetOption() -- may be called after Finalize()
- */
- namespace i2p {
- namespace config {
- extern boost::program_options::variables_map m_Options;
- /**
- * @brief Initialize list of acceptable parameters
- *
- * Should be called before any Parse* functions.
- */
- void Init();
- /**
- * @brief Parse cmdline parameters, and show help if requested
- * @param argc Cmdline arguments count, should be passed from main().
- * @param argv Cmdline parameters array, should be passed from main()
- *
- * If --help is given in parameters, shows its list with description
- * and terminates the program with exitcode 0.
- *
- * In case of parameter misuse boost throws an exception.
- * We internally handle type boost::program_options::unknown_option,
- * and then terminate the program with exitcode 1.
- *
- * Other exceptions will be passed to higher level.
- */
- void ParseCmdline(int argc, char* argv[], bool ignoreUnknown = false);
- /**
- * @brief Load and parse given config file
- * @param path Path to config file
- *
- * If error occurred when opening file path is points to,
- * we show the error message and terminate program.
- *
- * In case of parameter misuse boost throws an exception.
- * We internally handle type boost::program_options::unknown_option,
- * and then terminate program with exitcode 1.
- *
- * Other exceptions will be passed to higher level.
- */
- void ParseConfig(const std::string& path);
- /**
- * @brief Used to combine options from cmdline, config and default values
- */
- void Finalize();
- /* @brief Accessor to parameters by name
- * @param name Name of the requested parameter
- * @param value Variable where to store option
- * @return this function returns false if parameter not found
- *
- * Example: uint16_t port; GetOption("sam.port", port);
- */
- template<typename T>
- bool GetOption(const char *name, T& value) {
- if (!m_Options.count(name))
- return false;
- value = m_Options[name].as<T>();
- return true;
- }
- template<typename T>
- bool GetOption(const std::string& name, T& value)
- {
- return GetOption (name.c_str (), value);
- }
- bool GetOptionAsAny(const char *name, boost::any& value);
- bool GetOptionAsAny(const std::string& name, boost::any& value);
- /**
- * @brief Set value of given parameter
- * @param name Name of settable parameter
- * @param value New parameter value
- * @return true if value set up successful, false otherwise
- *
- * Example: uint16_t port = 2827; SetOption("bob.port", port);
- */
- template<typename T>
- bool SetOption(const char *name, const T& value) {
- if (!m_Options.count(name))
- return false;
- m_Options.at(name).value() = value;
- notify(m_Options);
- return true;
- }
- /**
- * @brief Check is value explicitly given or default
- * @param name Name of checked parameter
- * @return true if value set to default, false otherwise
- */
- bool IsDefault(const char *name);
- }
- }
- #endif // CONFIG_H
|