1 | // Boost string_algo library formatter.hpp header file ---------------------------// |
2 | |
3 | // Copyright Pavol Droba 2002-2003. |
4 | // |
5 | // Distributed under the Boost Software License, Version 1.0. |
6 | // (See accompanying file LICENSE_1_0.txt or copy at |
7 | // http://www.boost.org/LICENSE_1_0.txt) |
8 | |
9 | // See http://www.boost.org for updates, documentation, and revision history. |
10 | |
11 | #ifndef BOOST_STRING_FORMATTER_DETAIL_HPP |
12 | #define BOOST_STRING_FORMATTER_DETAIL_HPP |
13 | |
14 | |
15 | #include <boost/range/iterator_range_core.hpp> |
16 | #include <boost/range/begin.hpp> |
17 | #include <boost/range/end.hpp> |
18 | #include <boost/range/const_iterator.hpp> |
19 | |
20 | #include <boost/algorithm/string/detail/util.hpp> |
21 | |
22 | // generic replace functors -----------------------------------------------// |
23 | |
24 | namespace boost { |
25 | namespace algorithm { |
26 | namespace detail { |
27 | |
28 | // const format functor ----------------------------------------------------// |
29 | |
30 | // constant format functor |
31 | template<typename RangeT> |
32 | struct const_formatF |
33 | { |
34 | private: |
35 | typedef BOOST_STRING_TYPENAME |
36 | range_const_iterator<RangeT>::type format_iterator; |
37 | typedef iterator_range<format_iterator> result_type; |
38 | |
39 | public: |
40 | // Construction |
41 | const_formatF(const RangeT& Format) : |
42 | m_Format(::boost::begin(Format), ::boost::end(Format)) {} |
43 | |
44 | // Operation |
45 | #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564)) |
46 | template<typename Range2T> |
47 | result_type& operator()(const Range2T&) |
48 | { |
49 | return m_Format; |
50 | } |
51 | #endif |
52 | |
53 | template<typename Range2T> |
54 | const result_type& operator()(const Range2T&) const |
55 | { |
56 | return m_Format; |
57 | } |
58 | |
59 | private: |
60 | result_type m_Format; |
61 | }; |
62 | |
63 | // identity format functor ----------------------------------------------------// |
64 | |
65 | // identity format functor |
66 | template<typename RangeT> |
67 | struct identity_formatF |
68 | { |
69 | // Operation |
70 | template< typename Range2T > |
71 | const RangeT& operator()(const Range2T& Replace) const |
72 | { |
73 | return RangeT(::boost::begin(Replace), ::boost::end(Replace)); |
74 | } |
75 | }; |
76 | |
77 | // empty format functor ( used by erase ) ------------------------------------// |
78 | |
79 | // empty format functor |
80 | template< typename CharT > |
81 | struct empty_formatF |
82 | { |
83 | template< typename ReplaceT > |
84 | empty_container<CharT> operator()(const ReplaceT&) const |
85 | { |
86 | return empty_container<CharT>(); |
87 | } |
88 | }; |
89 | |
90 | // dissect format functor ----------------------------------------------------// |
91 | |
92 | // dissect format functor |
93 | template<typename FinderT> |
94 | struct dissect_formatF |
95 | { |
96 | public: |
97 | // Construction |
98 | dissect_formatF(FinderT Finder) : |
99 | m_Finder(Finder) {} |
100 | |
101 | // Operation |
102 | template<typename RangeT> |
103 | inline iterator_range< |
104 | BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> |
105 | operator()(const RangeT& Replace) const |
106 | { |
107 | return m_Finder(::boost::begin(Replace), ::boost::end(Replace)); |
108 | } |
109 | |
110 | private: |
111 | FinderT m_Finder; |
112 | }; |
113 | |
114 | |
115 | } // namespace detail |
116 | } // namespace algorithm |
117 | } // namespace boost |
118 | |
119 | #endif // BOOST_STRING_FORMATTER_DETAIL_HPP |
120 | |