blob: bb24fa86bc91a2c7cb297748c04f5133cdae41c0 [file] [log] [blame]
Jeff Thompson86b6d642013-10-17 15:01:56 -07001/*
2 *
3 * Copyright (c) 1998-2009
4 * John Maddock
5 *
6 * Use, modification and distribution are subject to the
7 * Boost Software License, Version 1.0. (See accompanying file
8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 *
10 */
11
12 /*
13 * LOCATION: see http://www.boost.org for most recent version.
14 * FILE regex_format.hpp
15 * VERSION see <ndnboost/version.hpp>
16 * DESCRIPTION: Provides formatting output routines for search and replace
17 * operations. Note this is an internal header file included
18 * by regex.hpp, do not include on its own.
19 */
20
21#ifndef NDNBOOST_REGEX_V4_REGEX_REPLACE_HPP
22#define NDNBOOST_REGEX_V4_REGEX_REPLACE_HPP
23
24
25namespace ndnboost{
26
27#ifdef NDNBOOST_MSVC
28#pragma warning(push)
29#pragma warning(disable: 4103)
30#endif
31#ifdef NDNBOOST_HAS_ABI_HEADERS
32# include NDNBOOST_ABI_PREFIX
33#endif
34#ifdef NDNBOOST_MSVC
35#pragma warning(pop)
36#endif
37
38template <class OutputIterator, class BidirectionalIterator, class traits, class charT, class Formatter>
39OutputIterator regex_replace(OutputIterator out,
40 BidirectionalIterator first,
41 BidirectionalIterator last,
42 const basic_regex<charT, traits>& e,
43 Formatter fmt,
44 match_flag_type flags = match_default)
45{
46 regex_iterator<BidirectionalIterator, charT, traits> i(first, last, e, flags);
47 regex_iterator<BidirectionalIterator, charT, traits> j;
48 if(i == j)
49 {
50 if(!(flags & regex_constants::format_no_copy))
51 out = re_detail::copy(first, last, out);
52 }
53 else
54 {
55 BidirectionalIterator last_m(first);
56 while(i != j)
57 {
58 if(!(flags & regex_constants::format_no_copy))
59 out = re_detail::copy(i->prefix().first, i->prefix().second, out);
60 out = i->format(out, fmt, flags, e);
61 last_m = (*i)[0].second;
62 if(flags & regex_constants::format_first_only)
63 break;
64 ++i;
65 }
66 if(!(flags & regex_constants::format_no_copy))
67 out = re_detail::copy(last_m, last, out);
68 }
69 return out;
70}
71
72template <class traits, class charT, class Formatter>
73std::basic_string<charT> regex_replace(const std::basic_string<charT>& s,
74 const basic_regex<charT, traits>& e,
75 Formatter fmt,
76 match_flag_type flags = match_default)
77{
78 std::basic_string<charT> result;
79 re_detail::string_out_iterator<std::basic_string<charT> > i(result);
80 regex_replace(i, s.begin(), s.end(), e, fmt, flags);
81 return result;
82}
83
84#ifdef NDNBOOST_MSVC
85#pragma warning(push)
86#pragma warning(disable: 4103)
87#endif
88#ifdef NDNBOOST_HAS_ABI_HEADERS
89# include NDNBOOST_ABI_SUFFIX
90#endif
91#ifdef NDNBOOST_MSVC
92#pragma warning(pop)
93#endif
94
95} // namespace ndnboost
96
97#endif // NDNBOOST_REGEX_V4_REGEX_REPLACE_HPP
98
99