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