Skip to content

Commit 4846166

Browse files
committed
Done with modifier organization.
1 parent 862b94a commit 4846166

File tree

7 files changed

+38
-95
lines changed

7 files changed

+38
-95
lines changed

boost/network/message/modifiers/add_header.hpp

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,54 @@
88
// http://www.boost.org/LICENSE_1_0.txt)
99

1010
#include <boost/network/support/is_async.hpp>
11+
#include <boost/network/support/is_pod.hpp>
12+
#include <boost/utility/enable_if.hpp>
13+
#include <boost/mpl/and.hpp>
14+
#include <boost/mpl/not.hpp>
1115

1216
namespace boost { namespace network {
1317

1418
namespace impl {
15-
template <class Message, class KeyType, class ValueType>
16-
inline void add_header(Message const & message, KeyType const & key, ValueType const & value, tags::default_string const &, mpl::false_ const &) {
19+
template <class Message, class KeyType, class ValueType, class Tag>
20+
inline typename enable_if<
21+
mpl::and_<
22+
mpl::not_<is_pod<Tag> >
23+
, mpl::not_<is_async<Tag> >
24+
>
25+
, void
26+
>::type
27+
add_header(Message & message, KeyType const & key, ValueType const & value, Tag) {
1728
message.headers().insert(std::make_pair(key, value));
1829
}
1930

20-
template <class Message, class KeyType, class ValueType>
21-
inline void add_header(Message const & message, KeyType const & key, ValueType const & value, tags::default_wstring const &, mpl::false_ const &) {
22-
message.headers().insert(std::make_pair(key, value));
31+
template <class Message, class KeyType, class ValueType, class Tag>
32+
inline typename enable_if<
33+
mpl::and_<
34+
mpl::not_<is_pod<Tag> >
35+
, is_async<Tag>
36+
>
37+
, void
38+
>::type
39+
add_header(Message & message, KeyType const & key, ValueType const & value, Tag) {
40+
typedef typename Message::header_type header_type;
41+
message.add_header(header_type(key,value));
2342
}
2443

25-
template <class Message, class KeyType, class ValueType>
26-
inline void add_header(Message const & message, KeyType const & key, ValueType const & value, tags::async const &, mpl::true_ const &) {
27-
message.add_header(std::make_pair(key, value));
44+
template <class Message, class KeyType, class ValueType, class Tag>
45+
inline typename enable_if<
46+
is_pod<Tag>
47+
, void
48+
>::type
49+
add_header(Message & message, KeyType const & key, ValueType const & value, Tag) {
50+
typename Message::header_type header = { key, value };
51+
message.headers.insert(message.headers.end(), header);
2852
}
2953

3054
}
3155

3256
template <class Tag, template <class> class Message, class KeyType, class ValueType>
33-
inline void add_header(Message<Tag> const & message, KeyType const & key, ValueType const & value) {
34-
impl::add_header(message, key, value, Tag(), is_async<Tag>());
57+
inline void add_header(Message<Tag> & message, KeyType const & key, ValueType const & value) {
58+
impl::add_header(message, key, value, Tag());
3559
}
3660

3761
} // namespace network

boost/network/protocol/http/impl/request.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,9 @@ namespace boost { namespace network { namespace http {
122122
struct not_quite_pod_request_base {
123123
typedef Tag tag;
124124
typedef typename string<Tag>::type string_type;
125+
typedef request_header<Tag> header_type;
125126
typedef typename vector<tags::http_server>::
126-
template apply<request_header<Tag> >::type
127+
template apply<header_type>::type
127128
vector_type;
128129
typedef vector_type headers_container_type;
129130
typedef boost::uint16_t port_type;

boost/network/protocol/http/message.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
#include <boost/network/protocol/http/message/header/name.hpp>
1717
#include <boost/network/protocol/http/message/header/value.hpp>
1818
#include <boost/network/protocol/http/message/header_concept.hpp>
19-
#include <boost/network/protocol/http/message/modifiers/add_header.hpp>
20-
#include <boost/network/protocol/http/message/modifiers/remove_header.hpp>
2119
#include <boost/network/message.hpp>
2220
#include <boost/network/tags.hpp>
2321
#include <string>

boost/network/protocol/http/message/async_message.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ namespace boost { namespace network { namespace http {
2929

3030
typedef typename string<Tag>::type string_type;
3131
typedef typename headers_container<Tag>::type headers_container_type;
32+
typedef typename headers_container_type::value_type header_type;
3233

3334
async_message()
3435
: status_message_(),
@@ -104,7 +105,7 @@ namespace boost { namespace network { namespace http {
104105
}
105106

106107
void add_header(typename headers_container_type::value_type const & pair_) const {
107-
added_headers.insert(pair_);
108+
added_headers.insert(added_headers.end(), pair_);
108109
}
109110

110111
void remove_header(typename headers_container_type::key_type const & key_) const {

boost/network/protocol/http/message/modifiers/add_header.hpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

boost/network/protocol/http/message/modifiers/remove_header.hpp

Lines changed: 0 additions & 49 deletions
This file was deleted.

boost/network/protocol/http/request.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
#include <boost/network/tags.hpp>
1313
#include <boost/network/message_fwd.hpp>
1414
#include <boost/network/message/wrappers.hpp>
15-
#include <boost/network/protocol/http/message/modifiers/add_header.hpp>
16-
#include <boost/network/protocol/http/message/modifiers/remove_header.hpp>
1715

1816
#include <boost/network/protocol/http/message/directives/uri.hpp>
1917
#include <boost/network/protocol/http/message/modifiers/uri.hpp>

0 commit comments

Comments
 (0)