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

Commitaba7b0e

Browse files
committed
[URI] Non-hierarchical URIs can now be built using the builder.
1 parent8dde86c commitaba7b0e

File tree

6 files changed

+129
-3
lines changed

6 files changed

+129
-3
lines changed

‎boost/network/uri/directives/scheme.hpp‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include<boost/range/begin.hpp>
1212
#include<boost/range/end.hpp>
13+
#include<boost/network/uri/schemes.hpp>
1314

1415

1516
namespaceboost {
@@ -26,7 +27,12 @@ struct scheme_directive {
2627
>
2728
voidoperator () (Uri &uri)const {
2829
uri.append(scheme);
29-
uri.append("://");
30+
if (non_hierarchical_schemes::exists(scheme)) {
31+
uri.append(":");
32+
}
33+
else {
34+
uri.append("://");
35+
}
3036
}
3137

3238
std::string scheme;

‎boost/network/uri/schemes.hpp‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2012 Glyn Matthews.
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// (See accompanying file LICENSE_1_0.txt or copy at
4+
// http://www.boost.org/LICENSE_1_0.txt)
5+
6+
7+
#ifndef __BOOST_NETWORK_URI_SCHEMES_INC__
8+
#define__BOOST_NETWORK_URI_SCHEMES_INC__
9+
10+
11+
#include<boost/unordered_set.hpp>
12+
#include<string>
13+
14+
15+
namespaceboost {
16+
namespacenetwork {
17+
namespaceuri {
18+
structhierarchical_schemes {
19+
20+
staticvoidregister_(const std::string &scheme);
21+
staticboolexists(const std::string &scheme);
22+
23+
static boost::unordered_set<std::string> schemes_;
24+
25+
};
26+
27+
structnon_hierarchical_schemes {
28+
29+
staticvoidregister_(const std::string &scheme);
30+
staticboolexists(const std::string &scheme);
31+
32+
static boost::unordered_set<std::string> schemes_;
33+
34+
};
35+
}// namespace uri
36+
}// namespace network
37+
}// namespace boost
38+
39+
40+
#endif// __BOOST_NETWORK_URI_SCHEMES_INC__

‎boost/network/uri/uri.hpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ bool is_valid(const uri &uri_) {
279279

280280
inline
281281
booloperator == (const uri &lhs,const uri &rhs) {
282-
returnstd::equal(lhs.begin(), lhs.end(),rhs.begin());
282+
returnboost::equal(lhs,rhs);
283283
}
284284
}// namespace uri
285285
}// namespace network

‎libs/network/src/CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
include_directories(${CPP-NETLIB_SOURCE_DIR})
1010

11-
set(CPP-NETLIB_URI_SRCS uri/parse.cpp)
11+
set(CPP-NETLIB_URI_SRCS uri/parse.cpp uri/schemes.cpp)
1212
add_library(cppnetlib-uri ${CPP-NETLIB_URI_SRCS})
1313

1414
set(CPP-NETLIB_HTTP_SERVER_SRCS server_request_parsers_impl.cpp)

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

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright 2012 Glyn Matthews.
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// (See accompanying file LICENSE_1_0.txt or copy at
4+
// http://www.boost.org/LICENSE_1_0.txt)
5+
6+
7+
#include<boost/network/uri/schemes.hpp>
8+
9+
10+
namespaceboost {
11+
namespacenetwork {
12+
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+
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+
schemes_.end() != schemes_.find(scheme);
31+
}
32+
33+
namespace {
34+
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");
52+
returntrue;
53+
}
54+
55+
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");
62+
returntrue;
63+
}
64+
65+
66+
staticbool hierarchical = register_hierarchical_schemes();
67+
staticbool non_hierarchical = register_non_hierarchical_schemes();
68+
}// namespace
69+
}// namespace uri
70+
}// namespace network
71+
}// namespace boost

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,12 @@ BOOST_AUTO_TEST_CASE(encoded_null_char_test)
163163
BOOST_CHECK_EQUAL(uri::host(instance),"www.example.com");
164164
BOOST_CHECK_EQUAL(uri::path(instance),"/");
165165
}
166+
167+
BOOST_AUTO_TEST_CASE(mailto_builder_test)
168+
{
169+
uri::uri instance;
170+
instance <<uri::scheme("mailto") <<uri::path("cpp-netlib@example.com");
171+
BOOST_REQUIRE(uri::valid(instance));
172+
BOOST_CHECK_EQUAL(uri::scheme(instance),"mailto");
173+
BOOST_CHECK_EQUAL(uri::path(instance),"cpp-netlib@example.com");
174+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp