Skip to content

Commit

Permalink
Add arg_iter and arg_view.
Browse files Browse the repository at this point in the history
  • Loading branch information
tzlaine committed Sep 14, 2020
1 parent 6bb940b commit 571fc87
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions include/boost/program_options_2/parse_command_line.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,44 @@ namespace boost { namespace program_options_2 {
std::string_view help_description = "Print this help message and exit";
};

/** TODO */
template<typename Char>
struct arg_iter : stl_interfaces::proxy_iterator_interface<
arg_iter<Char>,
std::random_access_iterator_tag,
std::basic_string_view<Char>>
{
arg_iter() = default;
arg_iter(Char const ** ptr) : it_(ptr) { BOOST_ASSERT(ptr); }

std::basic_string_view<Char> operator*() const { return {*it_}; }

private:
friend boost::stl_interfaces::access;
Char const **& base_reference() noexcept { return it_; }
Char const ** base_reference() const noexcept { return it_; }
Char const ** it_;
};

/** TODO */
template<typename Char>
struct arg_view : stl_interfaces::view_interface<arg_view<Char>>
{
using iterator = arg_iter<Char>;

arg_view() = default;
arg_view(int argc, Char const ** argv) :
first_(argv), last_(argv + argc)
{}

iterator begin() const { return first_; }
iterator end() const { return last_; }

private:
iterator first_;
iterator last_;
};

namespace detail {
template<typename BidiIter, typename T>
BidiIter find_last(BidiIter first, BidiIter last, T const & x)
Expand Down

0 comments on commit 571fc87

Please sign in to comment.