Skip to content

Commit 4fbe263

Browse files
committed
Cleaned up URI parts.
1 parent e2c257f commit 4fbe263

File tree

3 files changed

+61
-52
lines changed

3 files changed

+61
-52
lines changed

boost/network/uri/detail/uri_parts.hpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# define BOOST_NETWORK_URL_DETAIL_URL_PARTS_HPP_
88

99

10-
# include <boost/fusion/include/vector.hpp>
10+
# include <utility>
1111

1212

1313
namespace boost {
@@ -18,29 +18,28 @@ template <
1818
class String
1919
>
2020
struct iterator_range
21-
: boost::fusion::vector<
21+
: std::pair<
2222
typename String::const_iterator
23-
, typename String::const_iterator
24-
>
25-
{ };
23+
, typename String::const_iterator> {
2624

25+
};
2726

2827
template <
2928
class String
3029
>
31-
struct uri_parts
32-
: boost::fusion::vector<
33-
iterator_range<String> // scheme
34-
, boost::fusion::vector<
35-
iterator_range<String> // user_info
36-
, iterator_range<String> // host
37-
, iterator_range<String> // port
38-
, iterator_range<String> // path
39-
>
40-
, iterator_range<String> // query
41-
, iterator_range<String> // fragment
30+
struct hierarchical_part {
31+
iterator_range<String> user_info, host, port, path;
32+
};
33+
34+
template <
35+
class String
4236
>
43-
{ };
37+
struct uri_parts {
38+
iterator_range<String> scheme;
39+
hierarchical_part<String> hier_part;
40+
iterator_range<String> query;
41+
iterator_range<String> fragment;
42+
};
4443
} // namespace detail
4544
} // namespace uri
4645
} // namespace network

boost/network/uri/uri.hpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
# include <boost/network/traits/string.hpp>
1212
# include <boost/network/constants.hpp>
1313
# include <boost/network/uri/detail/uri_parts.hpp>
14-
# include <boost/fusion/sequence/intrinsic/at_c.hpp>
1514
# include <boost/algorithm/string.hpp>
1615
# include <boost/range/iterator_range.hpp>
1716
# include <boost/operators.hpp>
@@ -104,45 +103,38 @@ class uri
104103
}
105104

106105
const_range_type scheme_range() const {
107-
using boost::fusion::at_c;
108-
return const_range_type(at_c<0>(at_c<0>(uri_parts_)),
109-
at_c<1>(at_c<0>(uri_parts_)));
106+
return const_range_type(uri_parts_.scheme.first,
107+
uri_parts_.scheme.second);
110108
}
111109

112110
const_range_type user_info_range() const {
113-
using boost::fusion::at_c;
114-
return const_range_type(at_c<0>(at_c<0>(at_c<1>(uri_parts_))),
115-
at_c<1>(at_c<0>(at_c<1>(uri_parts_))));
111+
return const_range_type(uri_parts_.hier_part.user_info.first,
112+
uri_parts_.hier_part.user_info.second);
116113
}
117114

118115
const_range_type host_range() const {
119-
using boost::fusion::at_c;
120-
return const_range_type(at_c<0>(at_c<1>(at_c<1>(uri_parts_))),
121-
at_c<1>(at_c<1>(at_c<1>(uri_parts_))));
116+
return const_range_type(uri_parts_.hier_part.host.first,
117+
uri_parts_.hier_part.host.second);
122118
}
123119

124120
const_range_type port_range() const {
125-
using boost::fusion::at_c;
126-
return const_range_type(at_c<0>(at_c<2>(at_c<1>(uri_parts_))),
127-
at_c<1>(at_c<2>(at_c<1>(uri_parts_))));
121+
return const_range_type(uri_parts_.hier_part.port.first,
122+
uri_parts_.hier_part.port.second);
128123
}
129124

130125
const_range_type path_range() const {
131-
using boost::fusion::at_c;
132-
return const_range_type(at_c<0>(at_c<3>(at_c<1>(uri_parts_))),
133-
at_c<1>(at_c<3>(at_c<1>(uri_parts_))));
126+
return const_range_type(uri_parts_.hier_part.path.first,
127+
uri_parts_.hier_part.path.second);
134128
}
135129

136130
const_range_type query_range() const {
137-
using boost::fusion::at_c;
138-
return const_range_type(at_c<0>(at_c<2>(uri_parts_)),
139-
at_c<1>(at_c<2>(uri_parts_)));
131+
return const_range_type(uri_parts_.query.first,
132+
uri_parts_.query.second);
140133
}
141134

142135
const_range_type fragment_range() const {
143-
using boost::fusion::at_c;
144-
return const_range_type(at_c<0>(at_c<3>(uri_parts_)),
145-
at_c<1>(at_c<3>(uri_parts_)));
136+
return const_range_type(uri_parts_.fragment.first,
137+
uri_parts_.fragment.second);
146138
}
147139

148140
string_type scheme() const {

libs/network/src/uri/parse.cpp

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,36 @@
1010
#include <boost/spirit/include/phoenix_operator.hpp>
1111
#include <boost/spirit/include/version.hpp>
1212
#include <boost/spirit/repository/include/qi_iter_pos.hpp>
13+
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
14+
15+
16+
BOOST_FUSION_ADAPT_TPL_STRUCT
17+
(
18+
(String),
19+
(boost::network::uri::detail::iterator_range)(String),
20+
(typename String::const_iterator, first)
21+
(typename String::const_iterator, second)
22+
);
23+
24+
BOOST_FUSION_ADAPT_TPL_STRUCT
25+
(
26+
(String),
27+
(boost::network::uri::detail::hierarchical_part)(String),
28+
(boost::network::uri::detail::iterator_range<String>, user_info)
29+
(boost::network::uri::detail::iterator_range<String>, host)
30+
(boost::network::uri::detail::iterator_range<String>, port)
31+
(boost::network::uri::detail::iterator_range<String>, path)
32+
);
33+
34+
BOOST_FUSION_ADAPT_TPL_STRUCT
35+
(
36+
(String),
37+
(boost::network::uri::detail::uri_parts)(String),
38+
(boost::network::uri::detail::iterator_range<String>, scheme)
39+
(boost::network::uri::detail::hierarchical_part<String>, hier_part)
40+
(boost::network::uri::detail::iterator_range<String>, query)
41+
(boost::network::uri::detail::iterator_range<String>, fragment)
42+
);
1343

1444

1545
namespace boost {
@@ -222,10 +252,7 @@ struct uri_grammar : qi::grammar<Iterator, detail::uri_parts<String>()> {
222252
qi::rule<Iterator, iterator_range<String>()>
223253
scheme, user_info, query, fragment;
224254

225-
qi::rule<Iterator, boost::fusion::vector<iterator_range<String>,
226-
iterator_range<String>,
227-
iterator_range<String>,
228-
iterator_range<String> >()>
255+
qi::rule<Iterator, hierarchical_part<String>()>
229256
hier_part;
230257

231258
// actual uri parser
@@ -241,15 +268,6 @@ bool parse(std::string::const_iterator first,
241268
bool is_valid = qi::parse(first, last, grammar, parts);
242269
return is_valid && (first == last);
243270
}
244-
245-
bool parse(std::wstring::const_iterator first,
246-
std::wstring::const_iterator last,
247-
uri_parts<std::wstring> &parts) {
248-
namespace qi = boost::spirit::qi;
249-
static uri_grammar<std::wstring, std::wstring::const_iterator> grammar;
250-
bool is_valid = qi::parse(first, last, grammar, parts);
251-
return is_valid && (first == last);
252-
}
253271
} // namespace detail
254272
} // namespace uri
255273
} // namespace network

0 commit comments

Comments
 (0)