Skip to content

Commit 3375ab7

Browse files
author
mikhail_beris
committed
Implementing to_lower transformation.
1 parent 9e2824e commit 3375ab7

File tree

3 files changed

+95
-1
lines changed

3 files changed

+95
-1
lines changed

boost/network/message/transformers.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
#include <boost/network/message/transformers/selectors.hpp>
1515
#include <boost/network/message/transformers/to_upper.hpp>
16+
#include <boost/network/message/transformers/to_lower.hpp>
1617

1718
#include <boost/type_traits.hpp>
1819

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
2+
// Copyright Dean Michael Berris 2007.
3+
// Distributed under the Boost Software License, Version 1.0.
4+
// (See accompanying file LICENSE_1_0.txt or copy at
5+
// http://www.boost.org/LICENSE_1_0.txt)
6+
7+
#ifndef __NETWORK_MESSAGE_TRANSFORMERS_TO_LOWER_HPP__
8+
#define __NETWORK_MESSAGE_TRANSFORMERS_TO_LOWER_HPP__
9+
10+
#include <boost/algorithm/string.hpp>
11+
12+
/** to_lower.hpp
13+
*
14+
* Implements the to_lower transformer. This applies
15+
* the to_lower string algorithm to a string, which
16+
* is selected by the appropriate selector.
17+
*
18+
* This defines a type, to be applied using template
19+
* metaprogramming on the selected string target.
20+
*/
21+
namespace boost { namespace network {
22+
23+
namespace impl {
24+
25+
template <class Selector>
26+
struct to_lower_transformer { };
27+
28+
template <>
29+
struct to_lower_transformer<selectors::source_selector> {
30+
template <class Tag>
31+
void operator() (basic_message<Tag> & message_) const {
32+
boost::to_lower(message_.source());
33+
};
34+
35+
protected:
36+
~to_lower_transformer() { };
37+
};
38+
39+
template <>
40+
struct to_lower_transformer<selectors::destination_selector> {
41+
template <class Tag>
42+
void operator() (basic_message<Tag> & message_) const {
43+
boost::to_lower(message_.destination());
44+
};
45+
46+
protected:
47+
~to_lower_transformer() { };
48+
};
49+
50+
}; // namespace impl
51+
52+
namespace detail {
53+
struct to_lower_placeholder_helper;
54+
};
55+
56+
detail::to_lower_placeholder_helper to_lower_(detail::to_lower_placeholder_helper);
57+
58+
namespace detail {
59+
60+
struct to_lower_placeholder_helper {
61+
template <class Selector>
62+
struct type : public impl::to_lower_transformer<Selector> { };
63+
private:
64+
to_lower_placeholder_helper() {};
65+
to_lower_placeholder_helper(to_lower_placeholder_helper const &) {};
66+
friend to_lower_placeholder_helper boost::network::to_lower_(to_lower_placeholder_helper);
67+
};
68+
69+
};
70+
71+
typedef detail::to_lower_placeholder_helper (*to_lower_placeholder)(detail::to_lower_placeholder_helper);
72+
73+
inline detail::to_lower_placeholder_helper to_lower_(detail::to_lower_placeholder_helper) {
74+
return detail::to_lower_placeholder_helper();
75+
};
76+
77+
}; // namespace network
78+
79+
}; // namespace boost
80+
81+
#endif // __NETWORK_MESSAGE_TRANSFORMERS_TO_LOWER_HPP__
82+

libs/network/test/message_transform_test.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <boost/network.hpp>
1010
#include <algorithm>
1111

12-
BOOST_AUTO_TEST_CASE ( message_transform_tolower ) {
12+
BOOST_AUTO_TEST_CASE ( message_transform_toupper ) {
1313
using namespace boost::network;
1414

1515
message msg;
@@ -18,3 +18,14 @@ BOOST_AUTO_TEST_CASE ( message_transform_tolower ) {
1818
msg << transform(to_upper_, source_);
1919
BOOST_CHECK_EQUAL ( source(msg), "ME" );
2020
};
21+
22+
BOOST_AUTO_TEST_CASE ( message_transform_tolower ) {
23+
using namespace boost::network;
24+
25+
message msg;
26+
msg << source("ME");
27+
BOOST_CHECK_EQUAL ( source(msg), "ME" );
28+
msg << transform(to_lower_, source_);
29+
BOOST_CHECK_EQUAL ( source(msg), "me" );
30+
};
31+

0 commit comments

Comments
 (0)