Coverage Report

Created: 2025-12-31 06:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/boost/boost/program_options/detail/parsers.hpp
Line
Count
Source
1
// Copyright Vladimir Prus 2004.
2
// Distributed under the Boost Software License, Version 1.0.
3
// (See accompanying file LICENSE_1_0.txt
4
// or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6
#ifndef BOOST_PARSERS_HPP_VP_2004_05_06
7
#define BOOST_PARSERS_HPP_VP_2004_05_06
8
9
#include <boost/program_options/detail/convert.hpp>
10
11
#include <iterator>
12
13
namespace boost { namespace program_options {
14
15
    template<class charT>
16
    basic_command_line_parser<charT>::
17
    basic_command_line_parser(const std::vector<
18
                              std::basic_string<charT> >& xargs)
19
       : detail::cmdline(to_internal(xargs))
20
    {}
21
22
23
    template<class charT>
24
    basic_command_line_parser<charT>::
25
    basic_command_line_parser(int argc, const charT* const argv[])
26
    : detail::cmdline(
27
        to_internal(std::vector<std::basic_string<charT> >(argc ? argv+1 : argv, argv+argc))),
28
        m_desc()
29
    {}
30
31
    
32
    template<class charT>
33
    basic_command_line_parser<charT>& 
34
    basic_command_line_parser<charT>::options(const options_description& desc)
35
    {
36
        detail::cmdline::set_options_description(desc);
37
        m_desc = &desc;
38
        return *this;
39
    }
40
41
    template<class charT>
42
    basic_command_line_parser<charT>& 
43
    basic_command_line_parser<charT>::positional(
44
        const positional_options_description& desc)
45
    {
46
        detail::cmdline::set_positional_options(desc);
47
        return *this;
48
    }
49
50
    template<class charT>
51
    basic_command_line_parser<charT>& 
52
    basic_command_line_parser<charT>::style(int xstyle)
53
    {
54
        detail::cmdline::style(xstyle);
55
        return *this;
56
    }
57
58
    template<class charT>
59
    basic_command_line_parser<charT>& 
60
    basic_command_line_parser<charT>::extra_parser(ext_parser ext)
61
    {
62
        detail::cmdline::set_additional_parser(ext);
63
        return *this;
64
    }
65
66
    template<class charT>
67
    basic_command_line_parser<charT>& 
68
    basic_command_line_parser<charT>::allow_unregistered()
69
    {
70
        detail::cmdline::allow_unregistered();
71
        return *this;
72
    }
73
74
    template<class charT>
75
    basic_command_line_parser<charT>& 
76
    basic_command_line_parser<charT>::extra_style_parser(style_parser s)
77
    {
78
        detail::cmdline::extra_style_parser(s);
79
        return *this;
80
    }
81
82
83
84
    template<class charT>    
85
    basic_parsed_options<charT>
86
    basic_command_line_parser<charT>::run()
87
    {
88
        // save the canonical prefixes which were used by this cmdline parser
89
        //    eventually inside the parsed results
90
        //    This will be handy to format recognisable options
91
        //    for diagnostic messages if everything blows up much later on
92
        parsed_options result(m_desc, detail::cmdline::get_canonical_option_prefix());
93
        result.options = detail::cmdline::run();
94
95
        // Presense of parsed_options -> wparsed_options conversion
96
        // does the trick.
97
        return basic_parsed_options<charT>(result);
98
    }
99
100
101
    template<class charT>
102
    basic_parsed_options<charT>
103
    parse_command_line(int argc, const charT* const argv[],
104
                       const options_description& desc,
105
                       int style,
106
                       function1<std::pair<std::string, std::string>, 
107
                                 const std::string&> ext)
108
    {
109
        return basic_command_line_parser<charT>(argc, argv).options(desc).
110
            style(style).extra_parser(ext).run();
111
    }
112
113
    template<class charT>
114
    std::vector< std::basic_string<charT> > 
115
    collect_unrecognized(const std::vector< basic_option<charT> >& options,
116
                         enum collect_unrecognized_mode mode)
117
1.29k
    {
118
1.29k
        std::vector< std::basic_string<charT> >  result;
119
1.02M
        for(unsigned i = 0; i < options.size(); ++i)
120
1.01M
        {
121
1.01M
            if (options[i].unregistered ||
122
2.24k
                (mode == include_positional && options[i].position_key != -1))
123
1.01M
            {
124
1.01M
                copy(options[i].original_tokens.begin(),
125
1.01M
                     options[i].original_tokens.end(),
126
1.01M
                     back_inserter(result));
127
1.01M
            }
128
1.01M
        }
129
1.29k
        return result;
130
1.29k
    }
131
132
133
}}
134
135
#endif