]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/program_options/errors.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
04b0b6d41becdd44db80f6ba86e6643f8a776f4e
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / program_options / errors.hpp
1 // Copyright Vladimir Prus 2002-2004.\r
2 // Distributed under the Boost Software License, Version 1.0.\r
3 // (See accompanying file LICENSE_1_0.txt\r
4 // or copy at http://www.boost.org/LICENSE_1_0.txt)\r
5 \r
6 \r
7 #ifndef BOOST_ERRORS_VP_2003_01_02\r
8 #define BOOST_ERRORS_VP_2003_01_02\r
9 \r
10 #include <boost/program_options/config.hpp>\r
11 \r
12 #include <string>\r
13 #include <stdexcept>\r
14 #include <vector>\r
15 \r
16 \r
17 \r
18 namespace boost { namespace program_options {\r
19 \r
20     /** Base class for all errors in the library. */\r
21     class BOOST_PROGRAM_OPTIONS_DECL error : public std::logic_error {\r
22     public:\r
23         error(const std::string& what) : std::logic_error(what) {}\r
24     };\r
25 \r
26     class BOOST_PROGRAM_OPTIONS_DECL invalid_syntax : public error {\r
27     public:\r
28         enum kind_t {\r
29             long_not_allowed = 30,\r
30             long_adjacent_not_allowed,\r
31             short_adjacent_not_allowed,\r
32             empty_adjacent_parameter,\r
33             missing_parameter,\r
34             extra_parameter,\r
35             unrecognized_line\r
36         };\r
37         \r
38         invalid_syntax(const std::string& tokens, kind_t kind);\r
39 \r
40         // gcc says that throw specification on dtor is loosened\r
41         // without this line\r
42         ~invalid_syntax() throw() {}\r
43         \r
44         kind_t kind() const;\r
45         \r
46         const std::string& tokens() const;\r
47         \r
48     protected:\r
49         /** Used to convert kind_t to a related error text */\r
50         static std::string error_message(kind_t kind);\r
51 \r
52     private:\r
53         // TODO: copy ctor might throw\r
54         std::string m_tokens;\r
55 \r
56         kind_t m_kind;\r
57     };\r
58 \r
59     /** Class thrown when option name is not recognized. */\r
60     class BOOST_PROGRAM_OPTIONS_DECL unknown_option : public error {\r
61     public:\r
62         unknown_option(const std::string& name)\r
63         : error(std::string("unknown option ").append(name)), \r
64           m_option_name(name)\r
65         {}\r
66 \r
67         // gcc says that throw specification on dtor is loosened\r
68         // without this line\r
69         ~unknown_option() throw() {}\r
70         \r
71         const std::string& get_option_name() const throw();\r
72         \r
73     private:\r
74         std::string m_option_name;\r
75     };\r
76 \r
77     /** Class thrown when there's ambiguity amoung several possible options. */\r
78     class BOOST_PROGRAM_OPTIONS_DECL ambiguous_option : public error {\r
79     public:\r
80         ambiguous_option(const std::string& name, \r
81                          const std::vector<std::string>& alternatives)\r
82         : error(std::string("ambiguous option ").append(name))\r
83         , m_alternatives(alternatives)\r
84         , m_option_name(name)\r
85         {}\r
86 \r
87         ~ambiguous_option() throw() {}\r
88         \r
89         const std::string& get_option_name() const throw();\r
90         \r
91         const std::vector<std::string>& alternatives() const throw();\r
92 \r
93     private:\r
94         // TODO: copy ctor might throw\r
95         std::vector<std::string> m_alternatives;\r
96         std::string m_option_name;\r
97     };\r
98 \r
99     /** Class thrown when there are several option values, but\r
100         user called a method which cannot return them all. */\r
101     class BOOST_PROGRAM_OPTIONS_DECL multiple_values : public error {\r
102     public:\r
103         multiple_values() \r
104          : error("multiple values")\r
105          , m_option_name() {}\r
106          \r
107         ~multiple_values() throw() {}\r
108         \r
109         void set_option_name(const std::string& option);\r
110         \r
111         const std::string& get_option_name() const throw();\r
112         \r
113     private:\r
114         std::string m_option_name; // The name of the option which\r
115                                    // caused the exception.        \r
116     };\r
117 \r
118     /** Class thrown when there are several occurrences of an\r
119         option, but user called a method which cannot return \r
120         them all. */\r
121     class BOOST_PROGRAM_OPTIONS_DECL multiple_occurrences : public error {\r
122     public:\r
123         multiple_occurrences() \r
124          : error("multiple occurrences")\r
125          , m_option_name() {}\r
126          \r
127         ~multiple_occurrences() throw() {}\r
128         \r
129         void set_option_name(const std::string& option);\r
130         \r
131         const std::string& get_option_name() const throw();\r
132 \r
133     private:        \r
134         std::string m_option_name; // The name of the option which\r
135                                    // caused the exception.\r
136     };\r
137 \r
138     /** Class thrown when value of option is incorrect. */\r
139     class BOOST_PROGRAM_OPTIONS_DECL validation_error : public error {\r
140     public:\r
141         enum kind_t {\r
142             multiple_values_not_allowed = 30,\r
143             at_least_one_value_required, \r
144             invalid_bool_value,\r
145             invalid_option_value,\r
146             invalid_option\r
147         };\r
148         \r
149         validation_error(kind_t kind, \r
150                          const std::string& option_value = "",\r
151                          const std::string& option_name = "");\r
152                          \r
153         ~validation_error() throw() {}\r
154 \r
155         void set_option_name(const std::string& option);\r
156         \r
157         const std::string& get_option_name() const throw();\r
158         \r
159         const char* what() const throw();\r
160         \r
161     protected:\r
162         /** Used to convert kind_t to a related error text */\r
163         static std::string error_message(kind_t kind);\r
164 \r
165     private:\r
166         kind_t m_kind;\r
167         std::string m_option_name; // The name of the option which\r
168                                    // caused the exception.\r
169         std::string m_option_value; // Optional: value of the option m_options_name\r
170         mutable std::string m_message; // For on-demand formatting in 'what'\r
171 \r
172     };\r
173 \r
174     /** Class thrown if there is an invalid option value givenn */\r
175     class BOOST_PROGRAM_OPTIONS_DECL invalid_option_value \r
176         : public validation_error\r
177     {\r
178     public:\r
179         invalid_option_value(const std::string& value);\r
180 #ifndef BOOST_NO_STD_WSTRING\r
181         invalid_option_value(const std::wstring& value);\r
182 #endif\r
183     };\r
184 \r
185     /** Class thrown when there are too many positional options. \r
186         This is a programming error.\r
187     */\r
188     class BOOST_PROGRAM_OPTIONS_DECL too_many_positional_options_error : public error {\r
189     public:\r
190         too_many_positional_options_error() \r
191          : error("too many positional options") \r
192         {}\r
193     };\r
194 \r
195     /** Class thrown when there are syntax errors in given command line */\r
196     class BOOST_PROGRAM_OPTIONS_DECL invalid_command_line_syntax : public invalid_syntax {\r
197     public:\r
198         invalid_command_line_syntax(const std::string& tokens, kind_t kind);\r
199     };\r
200 \r
201     /** Class thrown when there are programming error related to style */\r
202     class BOOST_PROGRAM_OPTIONS_DECL invalid_command_line_style : public error {\r
203     public:\r
204         invalid_command_line_style(const std::string& msg)\r
205         : error(msg)\r
206         {}\r
207     };\r
208 \r
209     /** Class thrown if config file can not be read */\r
210     class BOOST_PROGRAM_OPTIONS_DECL reading_file : public error {\r
211     public:\r
212         reading_file(const char* filename)\r
213          : error(std::string("can not read file ").append(filename))\r
214         {}\r
215     };\r
216     \r
217      /** Class thrown when a required/mandatory option is missing */\r
218      class BOOST_PROGRAM_OPTIONS_DECL required_option : public error {\r
219      public:\r
220         required_option(const std::string& name)\r
221         : error(std::string("missing required option ").append(name))\r
222         , m_option_name(name)\r
223         {}\r
224  \r
225         ~required_option() throw() {}\r
226 \r
227         const std::string& get_option_name() const throw();\r
228         \r
229      private:\r
230         std::string m_option_name; // The name of the option which\r
231                                    // caused the exception.\r
232      };\r
233 }}\r
234 \r
235 \r
236 #endif\r