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_HPP
12 #define BOOST_STRING_FORMATTER_HPP
13 
14 #include <boost/detail/iterator.hpp>
15 #include <boost/range/value_type.hpp>
16 #include <boost/range/iterator_range_core.hpp>
17 #include <boost/range/as_literal.hpp>
18 
19 #include <boost/algorithm/string/detail/formatter.hpp>
20 
21 /*! \file
22     Defines Formatter generators. Formatter is a functor which formats
23     a string according to given parameters. A Formatter works
24     in conjunction with a Finder. A Finder can provide additional information
25     for a specific Formatter. An example of such a cooperation is regex_finder
26     and regex_formatter.
27 
28     Formatters are used as pluggable components for replace facilities.
29     This header contains generator functions for the Formatters provided in this library.
30 */
31 
32 namespace boost {
33     namespace algorithm {
34 
35 // generic formatters  ---------------------------------------------------------------//
36 
37         //! Constant formatter
38         /*!
39             Constructs a \c const_formatter. Const formatter always returns
40             the same value, regardless of the parameter.
41 
42             \param Format A predefined value used as a result for formatting
43             \return An instance of the \c const_formatter object.
44         */
45         template<typename RangeT>
46         inline detail::const_formatF<
47             iterator_range<
48                 BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
const_formatter(const RangeT & Format)49         const_formatter(const RangeT& Format)
50         {
51             return detail::const_formatF<
52                 iterator_range<
53                     BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(::boost::as_literal(Format));
54         }
55 
56         //! Identity formatter
57         /*!
58             Constructs an \c identity_formatter. Identity formatter always returns
59             the parameter.
60 
61             \return An instance of the \c identity_formatter object.
62         */
63         template<typename RangeT>
64         inline detail::identity_formatF<
65             iterator_range<
66                 BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
identity_formatter()67         identity_formatter()
68         {
69             return detail::identity_formatF<
70                 iterator_range<
71                     BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
72         }
73 
74         //! Empty formatter
75         /*!
76             Constructs an \c empty_formatter. Empty formatter always returns an empty
77             sequence.
78 
79             \param Input container used to select a correct value_type for the
80                          resulting empty_container<>.
81             \return An instance of the \c empty_formatter object.
82         */
83         template<typename RangeT>
84         inline detail::empty_formatF<
85             BOOST_STRING_TYPENAME range_value<RangeT>::type>
empty_formatter(const RangeT &)86         empty_formatter(const RangeT&)
87         {
88             return detail::empty_formatF<
89                 BOOST_STRING_TYPENAME range_value<RangeT>::type>();
90         }
91 
92         //! Empty formatter
93         /*!
94             Constructs a \c dissect_formatter. Dissect formatter uses a specified finder
95             to extract a portion of the formatted sequence. The first finder's match is returned
96             as a result
97 
98             \param Finder a finder used to select a portion of the formatted sequence
99             \return An instance of the \c dissect_formatter object.
100         */
101         template<typename FinderT>
102         inline detail::dissect_formatF< FinderT >
dissect_formatter(const FinderT & Finder)103         dissect_formatter(const FinderT& Finder)
104         {
105             return detail::dissect_formatF<FinderT>(Finder);
106         }
107 
108 
109     } // namespace algorithm
110 
111     // pull the names to the boost namespace
112     using algorithm::const_formatter;
113     using algorithm::identity_formatter;
114     using algorithm::empty_formatter;
115     using algorithm::dissect_formatter;
116 
117 } // namespace boost
118 
119 
120 #endif  // BOOST_FORMATTER_HPP
121