Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/program_options/detail/parsers.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/program_options/detail/parsers.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,150 @@ +// Copyright Vladimir Prus 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_PARSERS_HPP_VP_2004_05_06 +#define BOOST_PARSERS_HPP_VP_2004_05_06 + +#include <boost/program_options/detail/convert.hpp> + +#include <iterator> + +namespace boost { namespace program_options { + + namespace detail { + template<class charT, class Iterator> + std::vector<std::basic_string<charT> > + make_vector(Iterator i, Iterator e) + { + std::vector<std::basic_string<charT> > result; + // Some compilers don't have templated constructor for + // vector, so we can't create vector from (argv+1, argv+argc) range + for(; i != e; ++i) + result.push_back(*i); + return result; + } + } + + template<class charT> + basic_command_line_parser<charT>:: + basic_command_line_parser(const std::vector< + std::basic_string<charT> >& xargs) + : detail::cmdline(to_internal(xargs)) + {} + + + template<class charT> + basic_command_line_parser<charT>:: + basic_command_line_parser(int argc, const charT* const argv[]) + : detail::cmdline( + // Explicit template arguments are required by gcc 3.3.1 + // (at least mingw version), and do no harm on other compilers. + to_internal(detail::make_vector<charT, const charT* const*>(argv+1, argv+argc+!argc))) + {} + + + template<class charT> + basic_command_line_parser<charT>& + basic_command_line_parser<charT>::options(const options_description& desc) + { + detail::cmdline::set_options_description(desc); + m_desc = &desc; + return *this; + } + + template<class charT> + basic_command_line_parser<charT>& + basic_command_line_parser<charT>::positional( + const positional_options_description& desc) + { + detail::cmdline::set_positional_options(desc); + return *this; + } + + template<class charT> + basic_command_line_parser<charT>& + basic_command_line_parser<charT>::style(int xstyle) + { + detail::cmdline::style(xstyle); + return *this; + } + + template<class charT> + basic_command_line_parser<charT>& + basic_command_line_parser<charT>::extra_parser(ext_parser ext) + { + detail::cmdline::set_additional_parser(ext); + return *this; + } + + template<class charT> + basic_command_line_parser<charT>& + basic_command_line_parser<charT>::allow_unregistered() + { + detail::cmdline::allow_unregistered(); + return *this; + } + + template<class charT> + basic_command_line_parser<charT>& + basic_command_line_parser<charT>::extra_style_parser(style_parser s) + { + detail::cmdline::extra_style_parser(s); + return *this; + } + + + + template<class charT> + basic_parsed_options<charT> + basic_command_line_parser<charT>::run() + { + // save the canonical prefixes which were used by this cmdline parser + // eventually inside the parsed results + // This will be handy to format recognisable options + // for diagnostic messages if everything blows up much later on + parsed_options result(m_desc, detail::cmdline::get_canonical_option_prefix()); + result.options = detail::cmdline::run(); + + // Presense of parsed_options -> wparsed_options conversion + // does the trick. + return basic_parsed_options<charT>(result); + } + + + template<class charT> + basic_parsed_options<charT> + parse_command_line(int argc, const charT* const argv[], + const options_description& desc, + int style, + function1<std::pair<std::string, std::string>, + const std::string&> ext) + { + return basic_command_line_parser<charT>(argc, argv).options(desc). + style(style).extra_parser(ext).run(); + } + + template<class charT> + std::vector< std::basic_string<charT> > + collect_unrecognized(const std::vector< basic_option<charT> >& options, + enum collect_unrecognized_mode mode) + { + std::vector< std::basic_string<charT> > result; + for(unsigned i = 0; i < options.size(); ++i) + { + if (options[i].unregistered || + (mode == include_positional && options[i].position_key != -1)) + { + copy(options[i].original_tokens.begin(), + options[i].original_tokens.end(), + back_inserter(result)); + } + } + return result; + } + + +}} + +#endif