RESTinio
boost_regex_engine.hpp
Go to the documentation of this file.
1 /*
2  restinio
3 */
4 
9 #pragma once
10 
11 #include <boost/regex.hpp>
12 
13 namespace restinio
14 {
15 
16 namespace router
17 {
18 
19 //
20 // boost_regex_engine_t
21 //
22 
25 {
26  using compiled_regex_t = boost::regex;
27  using match_results_t = std::vector< std::pair< std::size_t, size_t > >;
28  using matched_item_descriptor_t = match_results_t::value_type;
29 
30  static constexpr std::size_t
32  {
33  // The size of match results for standard regexes cannot be reserved
34  // and grows as needed, so no limits beforehand.
35  return std::numeric_limits< std::size_t >::max();
36  }
37 
39  static auto
42  string_view_t r,
44  bool is_case_sensative )
45  {
46  compiled_regex_t::flag_type regex_flags = boost::regex::ECMAScript;
47 
48  if( !is_case_sensative )
49  {
50  regex_flags |= boost::regex::icase;
51  }
52 
53  return compiled_regex_t{ r.data(), r.size(), regex_flags };
54  }
55 
57  static auto
59  string_view_t target_path,
60  const compiled_regex_t & r,
61  match_results_t & match_results )
62  {
63  boost::cmatch matches;
64  if(
65  boost::regex_search(
66  target_path.data(),
67  target_path.data() + target_path.size(),
68  matches,
69  r ) )
70  {
71  match_results.reserve( matches.size() );
72 
74  matches.begin(),
75  matches.end(),
76  std::back_inserter( match_results ),
77  [ begin = target_path.data() ]( const auto & m ){
78  return matched_item_descriptor_t{ m.first - begin, m.second - begin };
79  } );
80 
81  return true;
82  }
83  return false;
84  }
85 
87  static auto
89  {
90  return m.first;
91  }
92 
94  static auto
96  {
97  return m.second;
98  }
99 };
100 
101 } /* namespace router */
102 
103 } /* namespace restinio */
restinio::string_view_t
nonstd::string_view string_view_t
Definition: string_view.hpp:19
restinio::router::boost_regex_engine_t::match_results_t
std::vector< std::pair< std::size_t, size_t > > match_results_t
Definition: boost_regex_engine.hpp:27
restinio::router::boost_regex_engine_t::compile_regex
static auto compile_regex(string_view_t r, bool is_case_sensative)
Create compiled regex object for a given route.
Definition: boost_regex_engine.hpp:40
restinio::transforms::zlib::transform
std::string transform(string_view_t input, const params_t &params)
Do a specified zlib transformation.
Definition: zlib.hpp:878
restinio::router::boost_regex_engine_t::submatch_begin_pos
static auto submatch_begin_pos(const matched_item_descriptor_t &m)
Get the beginning of a submatch.
Definition: boost_regex_engine.hpp:88
restinio
Definition: asio_include.hpp:21
restinio::router::boost_regex_engine_t::submatch_end_pos
static auto submatch_end_pos(const matched_item_descriptor_t &m)
Get the end of a submatch.
Definition: boost_regex_engine.hpp:95
restinio::router::boost_regex_engine_t::matched_item_descriptor_t
match_results_t::value_type matched_item_descriptor_t
Definition: boost_regex_engine.hpp:28
restinio::router::boost_regex_engine_t::try_match
static auto try_match(string_view_t target_path, const compiled_regex_t &r, match_results_t &match_results)
Wrapper function for matching logic invokation.
Definition: boost_regex_engine.hpp:58
restinio::router::boost_regex_engine_t::max_capture_groups
static constexpr std::size_t max_capture_groups()
Definition: boost_regex_engine.hpp:31
restinio::router::boost_regex_engine_t
Regex engine implementation for using with standard regex implementation.
Definition: boost_regex_engine.hpp:25
restinio::router::boost_regex_engine_t::compiled_regex_t
boost::regex compiled_regex_t
Definition: boost_regex_engine.hpp:26