// Copyright Vladimir Prus 2002-2004. | |
// Distributed under the Boost Software License, Version 1.0. | |
// (See accompanying file LICENSE_1_0.txt | |
// or copy at http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef BOOST_ERRORS_VP_2003_01_02 | |
#define BOOST_ERRORS_VP_2003_01_02 | |
#include <boost/program_options/config.hpp> | |
#include <string> | |
#include <stdexcept> | |
#include <vector> | |
#if defined(BOOST_MSVC) | |
# pragma warning (push) | |
# pragma warning (disable:4275) // non dll-interface class 'std::logic_error' used as base for dll-interface class 'boost::program_options::error' | |
# pragma warning (disable:4251) // class 'std::vector<_Ty>' needs to have dll-interface to be used by clients of class 'boost::program_options::ambiguous_option' | |
#endif | |
namespace boost { namespace program_options { | |
/** Base class for all errors in the library. */ | |
class BOOST_PROGRAM_OPTIONS_DECL error : public std::logic_error { | |
public: | |
error(const std::string& xwhat) : std::logic_error(xwhat) {} | |
}; | |
class BOOST_PROGRAM_OPTIONS_DECL invalid_syntax : public error { | |
public: | |
enum kind_t { | |
long_not_allowed = 30, | |
long_adjacent_not_allowed, | |
short_adjacent_not_allowed, | |
empty_adjacent_parameter, | |
missing_parameter, | |
extra_parameter, | |
unrecognized_line | |
}; | |
invalid_syntax(const std::string& tokens, kind_t kind); | |
// gcc says that throw specification on dtor is loosened | |
// without this line | |
~invalid_syntax() throw() {} | |
kind_t kind() const; | |
const std::string& tokens() const; | |
protected: | |
/** Used to convert kind_t to a related error text */ | |
static std::string error_message(kind_t kind); | |
private: | |
// TODO: copy ctor might throw | |
std::string m_tokens; | |
kind_t m_kind; | |
}; | |
/** Class thrown when option name is not recognized. */ | |
class BOOST_PROGRAM_OPTIONS_DECL unknown_option : public error { | |
public: | |
unknown_option(const std::string& name) | |
: error(std::string("unknown option ").append(name)), | |
m_option_name(name) | |
{} | |
// gcc says that throw specification on dtor is loosened | |
// without this line | |
~unknown_option() throw() {} | |
const std::string& get_option_name() const throw(); | |
private: | |
std::string m_option_name; | |
}; | |
/** Class thrown when there's ambiguity amoung several possible options. */ | |
class BOOST_PROGRAM_OPTIONS_DECL ambiguous_option : public error { | |
public: | |
ambiguous_option(const std::string& name, | |
const std::vector<std::string>& xalternatives) | |
: error(std::string("ambiguous option ").append(name)) | |
, m_alternatives(xalternatives) | |
, m_option_name(name) | |
{} | |
~ambiguous_option() throw() {} | |
const std::string& get_option_name() const throw(); | |
const std::vector<std::string>& alternatives() const throw(); | |
private: | |
// TODO: copy ctor might throw | |
std::vector<std::string> m_alternatives; | |
std::string m_option_name; | |
}; | |
/** Class thrown when there are several option values, but | |
user called a method which cannot return them all. */ | |
class BOOST_PROGRAM_OPTIONS_DECL multiple_values : public error { | |
public: | |
multiple_values() | |
: error("multiple values") | |
, m_option_name() {} | |
~multiple_values() throw() {} | |
void set_option_name(const std::string& option); | |
const std::string& get_option_name() const throw(); | |
private: | |
std::string m_option_name; // The name of the option which | |
// caused the exception. | |
}; | |
/** Class thrown when there are several occurrences of an | |
option, but user called a method which cannot return | |
them all. */ | |
class BOOST_PROGRAM_OPTIONS_DECL multiple_occurrences : public error { | |
public: | |
multiple_occurrences() | |
: error("multiple occurrences") | |
, m_option_name() {} | |
~multiple_occurrences() throw() {} | |
void set_option_name(const std::string& option); | |
const std::string& get_option_name() const throw(); | |
private: | |
std::string m_option_name; // The name of the option which | |
// caused the exception. | |
}; | |
/** Class thrown when value of option is incorrect. */ | |
class BOOST_PROGRAM_OPTIONS_DECL validation_error : public error { | |
public: | |
enum kind_t { | |
multiple_values_not_allowed = 30, | |
at_least_one_value_required, | |
invalid_bool_value, | |
invalid_option_value, | |
invalid_option | |
}; | |
validation_error(kind_t kind, | |
const std::string& option_value = "", | |
const std::string& option_name = ""); | |
~validation_error() throw() {} | |
void set_option_name(const std::string& option); | |
const std::string& get_option_name() const throw(); | |
const char* what() const throw(); | |
protected: | |
/** Used to convert kind_t to a related error text */ | |
static std::string error_message(kind_t kind); | |
private: | |
kind_t m_kind; | |
std::string m_option_name; // The name of the option which | |
// caused the exception. | |
std::string m_option_value; // Optional: value of the option m_options_name | |
mutable std::string m_message; // For on-demand formatting in 'what' | |
}; | |
/** Class thrown if there is an invalid option value givenn */ | |
class BOOST_PROGRAM_OPTIONS_DECL invalid_option_value | |
: public validation_error | |
{ | |
public: | |
invalid_option_value(const std::string& value); | |
#ifndef BOOST_NO_STD_WSTRING | |
invalid_option_value(const std::wstring& value); | |
#endif | |
}; | |
/** Class thrown when there are too many positional options. | |
This is a programming error. | |
*/ | |
class BOOST_PROGRAM_OPTIONS_DECL too_many_positional_options_error : public error { | |
public: | |
too_many_positional_options_error() | |
: error("too many positional options") | |
{} | |
}; | |
/** Class thrown when there are syntax errors in given command line */ | |
class BOOST_PROGRAM_OPTIONS_DECL invalid_command_line_syntax : public invalid_syntax { | |
public: | |
invalid_command_line_syntax(const std::string& tokens, kind_t kind); | |
}; | |
/** Class thrown when there are programming error related to style */ | |
class BOOST_PROGRAM_OPTIONS_DECL invalid_command_line_style : public error { | |
public: | |
invalid_command_line_style(const std::string& msg) | |
: error(msg) | |
{} | |
}; | |
/** Class thrown if config file can not be read */ | |
class BOOST_PROGRAM_OPTIONS_DECL reading_file : public error { | |
public: | |
reading_file(const char* filename) | |
: error(std::string("can not read file ").append(filename)) | |
{} | |
}; | |
/** Class thrown when a required/mandatory option is missing */ | |
class BOOST_PROGRAM_OPTIONS_DECL required_option : public error { | |
public: | |
required_option(const std::string& name) | |
: error(std::string("missing required option ").append(name)) | |
, m_option_name(name) | |
{} | |
~required_option() throw() {} | |
const std::string& get_option_name() const throw(); | |
private: | |
std::string m_option_name; // The name of the option which | |
// caused the exception. | |
}; | |
}} | |
#if defined(BOOST_MSVC) | |
# pragma warning (pop) | |
#endif | |
#endif |