14#ifndef RANGES_V3_VIEW_TOKENIZE_HPP
15#define RANGES_V3_VIEW_TOKENIZE_HPP
17#include <initializer_list>
28#include <range/v3/utility/static_const.hpp>
33#include <range/v3/detail/prologue.hpp>
39 template<
typename Rng,
typename Regex,
typename SubMatchRange>
42 is_finite<Rng>::value ? finite : range_cardinality<Rng>::value>
46 CPP_assert(semiregular<Regex>);
47 CPP_assert(semiregular<SubMatchRange>);
52 std::regex_constants::match_flag_type flags_;
55 std::regex_token_iterator<iterator_t<meta::const_if_c<Const, Rng>>>;
60 std::regex_constants::match_flag_type flags)
61 : rng_(std::move(rng))
62 , rex_(std::move(rex))
63 , subs_(std::move(subs))
66 iterator_t<simple_view<Rng>()> begin()
68 meta::const_if_c<simple_view<Rng>(), Rng> & rng = rng_;
69 return {ranges::begin(rng), ranges::end(rng), rex_, subs_, flags_};
71 template(
bool Const =
true)(
73 iterator_t<Const> begin()
const
75 return {ranges::begin(rng_), ranges::end(rng_), rex_, subs_, flags_};
77 iterator_t<simple_view<Rng>()> end()
81 template(
bool Const =
true)(
83 iterator_t<Const> end()
const
93#if RANGES_CXX_DEDUCTION_GUIDES >= RANGES_CXX_DEDUCTION_GUIDES_17
94 template(
typename Rng,
typename Regex,
typename SubMatchRange)(
95 requires copy_constructible<Regex> AND copy_constructible<SubMatchRange>)
97 ->tokenize_view<views::all_t<Rng>, Regex, SubMatchRange>;
104 template(
typename Rng,
typename Regex)(
108 typename detail::decay_t<Regex>::value_type>)
110 operator()(Rng && rng,
113 std::regex_constants::match_flag_type flags =
114 std::regex_constants::match_default)
const
116 return {all(
static_cast<Rng &&
>(rng)),
117 static_cast<Regex &&
>(rex),
122 template(
typename Rng,
typename Regex)(
124 same_as<range_value_t<Rng>,
125 typename detail::decay_t<Regex>::value_type>)
127 operator()(Rng && rng,
129 std::vector<int> subs,
130 std::regex_constants::match_flag_type flags =
131 std::regex_constants::match_default)
const
133 return {all(
static_cast<Rng &&
>(rng)),
134 static_cast<Regex &&
>(rex),
139 template(
typename Rng,
typename Regex)(
141 same_as<range_value_t<Rng>,
142 typename detail::decay_t<Regex>::value_type>)
144 detail::decay_t<Regex>,
145 std::initializer_list<int>>
146 operator()(Rng && rng,
148 std::initializer_list<int> subs,
149 std::regex_constants::match_flag_type flags =
150 std::regex_constants::match_default)
const
152 return {all(
static_cast<Rng &&
>(rng)),
153 static_cast<Regex &&
>(rex),
161 using tokenize_base_fn::operator();
163 template<
typename Regex>
164 constexpr auto operator()(Regex && rex,
166 std::regex_constants::match_flag_type flags =
167 std::regex_constants::match_default)
const
173 template<
typename Regex>
174 auto operator()(Regex && rex,
175 std::vector<int> subs,
176 std::regex_constants::match_flag_type flags =
177 std::regex_constants::match_default)
const
180 static_cast<Regex &&
>(rex),
185 template<
typename Regex>
186 constexpr auto operator()(Regex && rex,
187 std::initializer_list<int> subs,
188 std::regex_constants::match_flag_type flags =
189 std::regex_constants::match_default)
const
203#include <range/v3/detail/epilogue.hpp>
204#include <range/v3/detail/satisfy_boost_range.hpp>
The bidirectional_range concept.
The common_range concept.
RANGES_INLINE_VARIABLE(detail::to_container_fn< detail::from_range< std::vector > >, to_vector) template< template< typename... > class ContT > auto to(RANGES_HIDDEN_DETAIL(detail
For initializing a container of the specified type with the elements of an Range.
Definition: conversion.hpp:399
defer< bind_back, Fn, Ts... > bind_back
Definition: meta.hpp:994
Definition: tokenize.hpp:43
Definition: interface.hpp:129
Definition: tokenize.hpp:103
Definition: tokenize.hpp:160