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

Private GIT Repository
5168ec6205a9fda929239772c426c60c6b2a7e54
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / program_options / detail / parsers.hpp
1 // Copyright Vladimir Prus 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 #ifndef BOOST_PARSERS_HPP_VP_2004_05_06\r
7 #define BOOST_PARSERS_HPP_VP_2004_05_06\r
8 \r
9 #include <boost/program_options/detail/convert.hpp>\r
10 \r
11 #include <iterator>\r
12 \r
13 namespace boost { namespace program_options {\r
14 \r
15     namespace detail {\r
16         template<class charT, class Iterator>\r
17         std::vector<std::basic_string<charT> > \r
18         make_vector(Iterator i, Iterator e)\r
19         {\r
20             std::vector<std::basic_string<charT> > result;\r
21             // Some compilers don't have templated constructor for \r
22             // vector, so we can't create vector from (argv+1, argv+argc) range\r
23             for(; i != e; ++i)\r
24                 result.push_back(*i);\r
25             return result;            \r
26         }\r
27     }\r
28 \r
29     template<class charT>\r
30     basic_command_line_parser<charT>::\r
31     basic_command_line_parser(const std::vector<\r
32                               std::basic_string<charT> >& args)\r
33        : detail::cmdline(to_internal(args))\r
34     {}\r
35 \r
36 \r
37     template<class charT>\r
38     basic_command_line_parser<charT>::\r
39     basic_command_line_parser(int argc, charT* argv[])\r
40     : detail::cmdline(\r
41         // Explicit template arguments are required by gcc 3.3.1 \r
42         // (at least mingw version), and do no harm on other compilers.\r
43         to_internal(detail::make_vector<charT, charT**>(argv+1, argv+argc+!argc)))\r
44     {}\r
45 \r
46     \r
47     template<class charT>\r
48     basic_command_line_parser<charT>& \r
49     basic_command_line_parser<charT>::options(const options_description& desc)\r
50     {\r
51        detail::cmdline::set_options_description(desc);\r
52         m_desc = &desc;\r
53         return *this;\r
54     }\r
55 \r
56     template<class charT>\r
57     basic_command_line_parser<charT>& \r
58     basic_command_line_parser<charT>::positional(\r
59         const positional_options_description& desc)\r
60     {\r
61         detail::cmdline::set_positional_options(desc);\r
62         return *this;\r
63     }\r
64 \r
65     template<class charT>\r
66     basic_command_line_parser<charT>& \r
67     basic_command_line_parser<charT>::style(int style)\r
68     {\r
69         detail::cmdline::style(style);\r
70         return *this;\r
71     }\r
72 \r
73     template<class charT>\r
74     basic_command_line_parser<charT>& \r
75     basic_command_line_parser<charT>::extra_parser(ext_parser ext)\r
76     {\r
77         detail::cmdline::set_additional_parser(ext);\r
78         return *this;\r
79     }\r
80 \r
81     template<class charT>\r
82     basic_command_line_parser<charT>& \r
83     basic_command_line_parser<charT>::allow_unregistered()\r
84     {\r
85         detail::cmdline::allow_unregistered();\r
86         return *this;\r
87     }\r
88 \r
89     template<class charT>\r
90     basic_command_line_parser<charT>& \r
91     basic_command_line_parser<charT>::extra_style_parser(style_parser s)\r
92     {\r
93         detail::cmdline::extra_style_parser(s);\r
94         return *this;\r
95     }\r
96 \r
97 \r
98 \r
99     template<class charT>    \r
100     basic_parsed_options<charT>\r
101     basic_command_line_parser<charT>::run()\r
102     {\r
103         parsed_options result(m_desc);\r
104         result.options = detail::cmdline::run();\r
105 \r
106         // Presense of parsed_options -> wparsed_options conversion\r
107         // does the trick.\r
108         return basic_parsed_options<charT>(result);\r
109     }\r
110 \r
111 \r
112     template<class charT>\r
113     basic_parsed_options<charT>\r
114     parse_command_line(int argc, charT* argv[],\r
115                        const options_description& desc,\r
116                        int style,\r
117                        function1<std::pair<std::string, std::string>, \r
118                                  const std::string&> ext)\r
119     {\r
120         return basic_command_line_parser<charT>(argc, argv).options(desc).\r
121             style(style).extra_parser(ext).run();\r
122     }\r
123 \r
124     template<class charT>\r
125     std::vector< std::basic_string<charT> > \r
126     collect_unrecognized(const std::vector< basic_option<charT> >& options,\r
127                          enum collect_unrecognized_mode mode)\r
128     {\r
129         std::vector< std::basic_string<charT> >  result;\r
130         for(unsigned i = 0; i < options.size(); ++i)\r
131         {\r
132             if (options[i].unregistered ||\r
133                 (mode == include_positional && options[i].position_key != -1))\r
134             {\r
135                 copy(options[i].original_tokens.begin(),\r
136                      options[i].original_tokens.end(),\r
137                      back_inserter(result));\r
138             }\r
139         }\r
140         return result;\r
141     }\r
142 \r
143 \r
144 }}\r
145 \r
146 #endif\r