Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit71040ee

Browse files
committed
[URI] Updated range & tests.
1 parentc8545c5 commit71040ee

File tree

6 files changed

+257
-76
lines changed

6 files changed

+257
-76
lines changed

‎boost/network/uri/detail/uri_parts.hpp‎

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,43 @@ struct hierarchical_part {
2323
optional<iterator_range<FwdIter> > host;
2424
optional<iterator_range<FwdIter> > port;
2525
optional<iterator_range<FwdIter> > path;
26+
27+
FwdIterbegin()const {
28+
returnboost::begin(user_info);
29+
}
30+
31+
FwdIterend()const {
32+
returnboost::end(path);
33+
}
34+
35+
voidupdate() {
36+
if (!user_info) {
37+
if (host) {
38+
user_info = iterator_range<FwdIter>(boost::begin(host.get()),
39+
boost::begin(host.get()));
40+
}
41+
elseif (path) {
42+
user_info = iterator_range<FwdIter>(boost::begin(path.get()),
43+
boost::begin(path.get()));
44+
}
45+
}
46+
47+
if (!host) {
48+
host = iterator_range<FwdIter>(boost::begin(path.get()),
49+
boost::begin(path.get()));
50+
}
51+
52+
if (!port) {
53+
port = iterator_range<FwdIter>(boost::end(host.get()),
54+
boost::end(host.get()));
55+
}
56+
57+
if (!path) {
58+
path = iterator_range<FwdIter>(boost::end(port.get()),
59+
boost::end(port.get()));
60+
}
61+
}
62+
2663
};
2764

2865
template<
@@ -34,14 +71,27 @@ struct uri_parts {
3471
optional<iterator_range<FwdIter> > query;
3572
optional<iterator_range<FwdIter> > fragment;
3673

37-
voidclear() {
38-
scheme = iterator_range<FwdIter>();
39-
hier_part.user_info = optional<iterator_range<FwdIter> >();
40-
hier_part.host = optional<iterator_range<FwdIter> >();
41-
hier_part.port = optional<iterator_range<FwdIter> >();
42-
hier_part.path = optional<iterator_range<FwdIter> >();
43-
query = optional<iterator_range<FwdIter> >();
44-
fragment = optional<iterator_range<FwdIter> >();
74+
FwdIterbegin()const {
75+
returnboost::begin(scheme);
76+
}
77+
78+
FwdIterend()const {
79+
returnboost::end(fragment);
80+
}
81+
82+
voidupdate() {
83+
84+
hier_part.update();
85+
86+
if (!query) {
87+
query = iterator_range<FwdIter>(boost::end(hier_part.path.get()),
88+
boost::end(hier_part.path.get()));
89+
}
90+
91+
if (!fragment) {
92+
fragment = iterator_range<FwdIter>(boost::end(query.get()),
93+
boost::end(query.get()));
94+
}
4595
}
4696
};
4797
}// namespace detail

‎boost/network/uri/schemes.hpp‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#define__BOOST_NETWORK_URI_SCHEMES_INC__
99

1010

11-
#include<boost/unordered_set.hpp>
1211
#include<string>
1312

1413

@@ -19,26 +18,16 @@ class hierarchical_schemes {
1918

2019
public:
2120

22-
staticvoidregister_(const std::string &scheme);
2321
staticboolexists(const std::string &scheme);
2422

25-
private:
26-
27-
static boost::unordered_set<std::string> schemes_;
28-
2923
};
3024

3125
classnon_hierarchical_schemes {
3226

3327
public:
3428

35-
staticvoidregister_(const std::string &scheme);
3629
staticboolexists(const std::string &scheme);
3730

38-
private:
39-
40-
static boost::unordered_set<std::string> schemes_;
41-
4231
};
4332
}// namespace uri
4433
}// namespace network

‎boost/network/uri/uri.hpp‎

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include<boost/network/uri/config.hpp>
1111
#include<boost/network/uri/detail/uri_parts.hpp>
12+
#include<boost/network/uri/schemes.hpp>
1213
#include<boost/utility/swap.hpp>
1314
#include<boost/range/algorithm/equal.hpp>
1415
#include<boost/range/algorithm/copy.hpp>
@@ -198,9 +199,15 @@ class BOOST_URI_DECL uri {
198199

199200
inline
200201
voiduri::parse() {
201-
uri_parts_.clear();
202202
const_iteratorfirst(boost::begin(uri_)),last(boost::end(uri_));
203203
is_valid_ =detail::parse(first, last, uri_parts_);
204+
if (is_valid_) {
205+
if (!uri_parts_.scheme) {
206+
uri_parts_.scheme =const_range_type(boost::begin(uri_),
207+
boost::begin(uri_));
208+
}
209+
uri_parts_.update();
210+
}
204211
}
205212

206213
inline
@@ -277,10 +284,10 @@ bool is_absolute(const uri &uri_) {
277284
return uri_.is_valid() && !boost::empty(uri_.scheme_range());
278285
}
279286

280-
//inline
281-
//bool is_hierarchical(const uri &uri_) {
282-
// return is_absolute(uri_) && hierarchical_schemes::exists(scheme(uri_));
283-
//}
287+
inline
288+
boolis_hierarchical(const uri &uri_) {
289+
returnis_absolute(uri_) &&hierarchical_schemes::exists(scheme(uri_));
290+
}
284291

285292
inline
286293
boolis_valid(const uri &uri_) {
@@ -315,22 +322,25 @@ uri from_parts(const uri &base_uri,
315322
const uri::string_type &query_,
316323
const uri::string_type &fragment_) {
317324
uriuri_(base_uri);
318-
return uri_ <<path(path_) <<query(query_) <<fragment(fragment_);
325+
builder(uri_).path(path_).query(query_).fragment(fragment_);
326+
return uri_;
319327
}
320328

321329
inline
322330
urifrom_parts(const uri &base_uri,
323331
const uri::string_type &path_,
324332
const uri::string_type &query_) {
325333
uriuri_(base_uri);
326-
return uri_ <<path(path_) <<query(query_);
334+
builder(uri_).path(path_).query(query_);
335+
return uri_;
327336
}
328337

329338
inline
330339
urifrom_parts(const uri &base_uri,
331340
const uri::string_type &path_) {
332341
uriuri_(base_uri);
333-
return uri_ <<path(path_);
342+
builder(uri_).path(path_);
343+
return uri_;
334344
}
335345

336346
inline
@@ -365,7 +375,8 @@ namespace uri {
365375
inline
366376
urifrom_file(const filesystem::path &path_) {
367377
uri uri_;
368-
return uri_ << schemes::file <<path(path_.string());
378+
builder(uri_).scheme("file").path(path_.string());
379+
return uri_;
369380
}
370381
}// namespace uri
371382
}// namespace network

‎libs/network/src/uri/schemes.cpp‎

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,67 +5,59 @@
55

66

77
#include<boost/network/uri/schemes.hpp>
8+
#include<boost/unordered_set.hpp>
89

910

1011
namespaceboost {
1112
namespacenetwork {
1213
namespaceuri {
13-
boost::unordered_set<std::string> hierarchical_schemes::schemes_;
14-
15-
voidhierarchical_schemes::register_(const std::string &scheme) {
16-
schemes_.insert(scheme);
17-
}
18-
19-
boolhierarchical_schemes::exists(const std::string &scheme) {
20-
return schemes_.end() != schemes_.find(scheme);
21-
}
22-
23-
boost::unordered_set<std::string> non_hierarchical_schemes::schemes_;
24-
25-
voidnon_hierarchical_schemes::register_(const std::string &scheme) {
26-
schemes_.insert(scheme);
27-
}
28-
29-
boolnon_hierarchical_schemes::exists(const std::string &scheme) {
30-
return schemes_.end() != schemes_.find(scheme);
31-
}
32-
3314
namespace {
15+
static boost::unordered_set<std::string> hierarchical_schemes_;
16+
static boost::unordered_set<std::string> non_hierarchical_schemes_;
17+
3418
boolregister_hierarchical_schemes() {
35-
hierarchical_schemes::register_("http");
36-
hierarchical_schemes::register_("https");
37-
hierarchical_schemes::register_("shttp");
38-
hierarchical_schemes::register_("ftp");
39-
hierarchical_schemes::register_("file");
40-
hierarchical_schemes::register_("dns");
41-
hierarchical_schemes::register_("nfs");
42-
hierarchical_schemes::register_("imap");
43-
hierarchical_schemes::register_("nntp");
44-
hierarchical_schemes::register_("pop");
45-
hierarchical_schemes::register_("rsync");
46-
hierarchical_schemes::register_("snmp");
47-
hierarchical_schemes::register_("telnet");
48-
hierarchical_schemes::register_("svn");
49-
hierarchical_schemes::register_("svn+ssh");
50-
hierarchical_schemes::register_("git");
51-
hierarchical_schemes::register_("git+ssh");
19+
hierarchical_schemes_.insert("http");
20+
hierarchical_schemes_.insert("https");
21+
hierarchical_schemes_.insert("shttp");
22+
hierarchical_schemes_.insert("ftp");
23+
hierarchical_schemes_.insert("file");
24+
hierarchical_schemes_.insert("dns");
25+
hierarchical_schemes_.insert("nfs");
26+
hierarchical_schemes_.insert("imap");
27+
hierarchical_schemes_.insert("nntp");
28+
hierarchical_schemes_.insert("pop");
29+
hierarchical_schemes_.insert("rsync");
30+
hierarchical_schemes_.insert("snmp");
31+
hierarchical_schemes_.insert("telnet");
32+
hierarchical_schemes_.insert("svn");
33+
hierarchical_schemes_.insert("svn+ssh");
34+
hierarchical_schemes_.insert("git");
35+
hierarchical_schemes_.insert("git+ssh");
5236
returntrue;
5337
}
5438

5539
boolregister_non_hierarchical_schemes() {
56-
non_hierarchical_schemes::register_("mailto");
57-
non_hierarchical_schemes::register_("news");
58-
non_hierarchical_schemes::register_("im");
59-
non_hierarchical_schemes::register_("sip");
60-
non_hierarchical_schemes::register_("sms");
61-
non_hierarchical_schemes::register_("xmpp");
40+
non_hierarchical_schemes_.insert("mailto");
41+
non_hierarchical_schemes_.insert("news");
42+
non_hierarchical_schemes_.insert("im");
43+
non_hierarchical_schemes_.insert("sip");
44+
non_hierarchical_schemes_.insert("sms");
45+
non_hierarchical_schemes_.insert("xmpp");
6246
returntrue;
6347
}
6448

6549

6650
staticbool hierarchical = register_hierarchical_schemes();
6751
staticbool non_hierarchical = register_non_hierarchical_schemes();
6852
}// namespace
53+
54+
boolhierarchical_schemes::exists(const std::string &scheme) {
55+
return hierarchical_schemes_.end() != hierarchical_schemes_.find(scheme);
56+
}
57+
58+
boolnon_hierarchical_schemes::exists(const std::string &scheme) {
59+
return non_hierarchical_schemes_.end() != non_hierarchical_schemes_.find(scheme);
60+
}
6961
}// namespace uri
7062
}// namespace network
7163
}// namespace boost

‎libs/network/test/uri/relative_url_test.cpp‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,10 @@ BOOST_AUTO_TEST_CASE(relative_uri_test) {
1717
BOOST_CHECK(uri::is_absolute(instance));
1818
BOOST_CHECK_EQUAL(uri::path(instance),"www.example.com/");
1919
}
20+
21+
BOOST_AUTO_TEST_CASE(relative_uri_scheme_test) {
22+
uri::uriinstance("www.example.com/");
23+
BOOST_REQUIRE(instance.scheme_range());
24+
BOOST_CHECK(instance.begin() ==boost::begin(instance.scheme_range()));
25+
BOOST_CHECK(instance.begin() ==boost::end(instance.scheme_range()));
26+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp