1 | // Boost string_algo library replace.hpp header file ---------------------------// |
2 | |
3 | // Copyright Pavol Droba 2002-2006. |
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_REPLACE_HPP |
12 | #define BOOST_STRING_REPLACE_HPP |
13 | |
14 | #include <boost/algorithm/string/config.hpp> |
15 | |
16 | #include <boost/range/iterator_range_core.hpp> |
17 | #include <boost/range/begin.hpp> |
18 | #include <boost/range/end.hpp> |
19 | #include <boost/range/iterator.hpp> |
20 | #include <boost/range/const_iterator.hpp> |
21 | |
22 | #include <boost/algorithm/string/find_format.hpp> |
23 | #include <boost/algorithm/string/finder.hpp> |
24 | #include <boost/algorithm/string/formatter.hpp> |
25 | #include <boost/algorithm/string/compare.hpp> |
26 | |
27 | /*! \file |
28 | Defines various replace algorithms. Each algorithm replaces |
29 | part(s) of the input according to set of searching and replace criteria. |
30 | */ |
31 | |
32 | namespace boost { |
33 | namespace algorithm { |
34 | |
35 | // replace_range --------------------------------------------------------------------// |
36 | |
37 | //! Replace range algorithm |
38 | /*! |
39 | Replace the given range in the input string. |
40 | The result is a modified copy of the input. It is returned as a sequence |
41 | or copied to the output iterator. |
42 | |
43 | \param Output An output iterator to which the result will be copied |
44 | \param Input An input string |
45 | \param SearchRange A range in the input to be substituted |
46 | \param Format A substitute string |
47 | \return An output iterator pointing just after the last inserted character or |
48 | a modified copy of the input |
49 | |
50 | \note The second variant of this function provides the strong exception-safety guarantee |
51 | */ |
52 | template< |
53 | typename OutputIteratorT, |
54 | typename Range1T, |
55 | typename Range2T> |
56 | inline OutputIteratorT replace_range_copy( |
57 | OutputIteratorT Output, |
58 | const Range1T& Input, |
59 | const iterator_range< |
60 | BOOST_STRING_TYPENAME |
61 | range_const_iterator<Range1T>::type>& SearchRange, |
62 | const Range2T& Format) |
63 | { |
64 | return ::boost::algorithm::find_format_copy( |
65 | Output, |
66 | Input, |
67 | ::boost::algorithm::range_finder(SearchRange), |
68 | ::boost::algorithm::const_formatter(Format)); |
69 | } |
70 | |
71 | //! Replace range algorithm |
72 | /*! |
73 | \overload |
74 | */ |
75 | template<typename SequenceT, typename RangeT> |
76 | inline SequenceT replace_range_copy( |
77 | const SequenceT& Input, |
78 | const iterator_range< |
79 | BOOST_STRING_TYPENAME |
80 | range_const_iterator<SequenceT>::type>& SearchRange, |
81 | const RangeT& Format) |
82 | { |
83 | return ::boost::algorithm::find_format_copy( |
84 | Input, |
85 | ::boost::algorithm::range_finder(SearchRange), |
86 | ::boost::algorithm::const_formatter(Format)); |
87 | } |
88 | |
89 | //! Replace range algorithm |
90 | /*! |
91 | Replace the given range in the input string. |
92 | The input sequence is modified in-place. |
93 | |
94 | \param Input An input string |
95 | \param SearchRange A range in the input to be substituted |
96 | \param Format A substitute string |
97 | */ |
98 | template<typename SequenceT, typename RangeT> |
99 | inline void replace_range( |
100 | SequenceT& Input, |
101 | const iterator_range< |
102 | BOOST_STRING_TYPENAME |
103 | range_iterator<SequenceT>::type>& SearchRange, |
104 | const RangeT& Format) |
105 | { |
106 | ::boost::algorithm::find_format( |
107 | Input, |
108 | ::boost::algorithm::range_finder(SearchRange), |
109 | ::boost::algorithm::const_formatter(Format)); |
110 | } |
111 | |
112 | // replace_first --------------------------------------------------------------------// |
113 | |
114 | //! Replace first algorithm |
115 | /*! |
116 | Replace the first match of the search substring in the input |
117 | with the format string. |
118 | The result is a modified copy of the input. It is returned as a sequence |
119 | or copied to the output iterator. |
120 | |
121 | \param Output An output iterator to which the result will be copied |
122 | \param Input An input string |
123 | \param Search A substring to be searched for |
124 | \param Format A substitute string |
125 | \return An output iterator pointing just after the last inserted character or |
126 | a modified copy of the input |
127 | |
128 | \note The second variant of this function provides the strong exception-safety guarantee |
129 | */ |
130 | template< |
131 | typename OutputIteratorT, |
132 | typename Range1T, |
133 | typename Range2T, |
134 | typename Range3T> |
135 | inline OutputIteratorT replace_first_copy( |
136 | OutputIteratorT Output, |
137 | const Range1T& Input, |
138 | const Range2T& Search, |
139 | const Range3T& Format) |
140 | { |
141 | return ::boost::algorithm::find_format_copy( |
142 | Output, |
143 | Input, |
144 | ::boost::algorithm::first_finder(Search), |
145 | ::boost::algorithm::const_formatter(Format) ); |
146 | } |
147 | |
148 | //! Replace first algorithm |
149 | /*! |
150 | \overload |
151 | */ |
152 | template<typename SequenceT, typename Range1T, typename Range2T> |
153 | inline SequenceT replace_first_copy( |
154 | const SequenceT& Input, |
155 | const Range1T& Search, |
156 | const Range2T& Format ) |
157 | { |
158 | return ::boost::algorithm::find_format_copy( |
159 | Input, |
160 | ::boost::algorithm::first_finder(Search), |
161 | ::boost::algorithm::const_formatter(Format) ); |
162 | } |
163 | |
164 | //! Replace first algorithm |
165 | /*! |
166 | replace the first match of the search substring in the input |
167 | with the format string. The input sequence is modified in-place. |
168 | |
169 | \param Input An input string |
170 | \param Search A substring to be searched for |
171 | \param Format A substitute string |
172 | */ |
173 | template<typename SequenceT, typename Range1T, typename Range2T> |
174 | inline void replace_first( |
175 | SequenceT& Input, |
176 | const Range1T& Search, |
177 | const Range2T& Format ) |
178 | { |
179 | ::boost::algorithm::find_format( |
180 | Input, |
181 | ::boost::algorithm::first_finder(Search), |
182 | ::boost::algorithm::const_formatter(Format) ); |
183 | } |
184 | |
185 | // replace_first ( case insensitive ) ---------------------------------------------// |
186 | |
187 | //! Replace first algorithm ( case insensitive ) |
188 | /*! |
189 | Replace the first match of the search substring in the input |
190 | with the format string. |
191 | The result is a modified copy of the input. It is returned as a sequence |
192 | or copied to the output iterator. |
193 | Searching is case insensitive. |
194 | |
195 | \param Output An output iterator to which the result will be copied |
196 | \param Input An input string |
197 | \param Search A substring to be searched for |
198 | \param Format A substitute string |
199 | \param Loc A locale used for case insensitive comparison |
200 | \return An output iterator pointing just after the last inserted character or |
201 | a modified copy of the input |
202 | |
203 | \note The second variant of this function provides the strong exception-safety guarantee |
204 | */ |
205 | template< |
206 | typename OutputIteratorT, |
207 | typename Range1T, |
208 | typename Range2T, |
209 | typename Range3T> |
210 | inline OutputIteratorT ireplace_first_copy( |
211 | OutputIteratorT Output, |
212 | const Range1T& Input, |
213 | const Range2T& Search, |
214 | const Range3T& Format, |
215 | const std::locale& Loc=std::locale() ) |
216 | { |
217 | return ::boost::algorithm::find_format_copy( |
218 | Output, |
219 | Input, |
220 | ::boost::algorithm::first_finder(Search, is_iequal(Loc)), |
221 | ::boost::algorithm::const_formatter(Format) ); |
222 | } |
223 | |
224 | //! Replace first algorithm ( case insensitive ) |
225 | /*! |
226 | \overload |
227 | */ |
228 | template<typename SequenceT, typename Range2T, typename Range1T> |
229 | inline SequenceT ireplace_first_copy( |
230 | const SequenceT& Input, |
231 | const Range2T& Search, |
232 | const Range1T& Format, |
233 | const std::locale& Loc=std::locale() ) |
234 | { |
235 | return ::boost::algorithm::find_format_copy( |
236 | Input, |
237 | ::boost::algorithm::first_finder(Search, is_iequal(Loc)), |
238 | ::boost::algorithm::const_formatter(Format) ); |
239 | } |
240 | |
241 | //! Replace first algorithm ( case insensitive ) |
242 | /*! |
243 | Replace the first match of the search substring in the input |
244 | with the format string. Input sequence is modified in-place. |
245 | Searching is case insensitive. |
246 | |
247 | \param Input An input string |
248 | \param Search A substring to be searched for |
249 | \param Format A substitute string |
250 | \param Loc A locale used for case insensitive comparison |
251 | */ |
252 | template<typename SequenceT, typename Range1T, typename Range2T> |
253 | inline void ireplace_first( |
254 | SequenceT& Input, |
255 | const Range1T& Search, |
256 | const Range2T& Format, |
257 | const std::locale& Loc=std::locale() ) |
258 | { |
259 | ::boost::algorithm::find_format( |
260 | Input, |
261 | ::boost::algorithm::first_finder(Search, is_iequal(Loc)), |
262 | ::boost::algorithm::const_formatter(Format) ); |
263 | } |
264 | |
265 | // replace_last --------------------------------------------------------------------// |
266 | |
267 | //! Replace last algorithm |
268 | /*! |
269 | Replace the last match of the search string in the input |
270 | with the format string. |
271 | The result is a modified copy of the input. It is returned as a sequence |
272 | or copied to the output iterator. |
273 | |
274 | \param Output An output iterator to which the result will be copied |
275 | \param Input An input string |
276 | \param Search A substring to be searched for |
277 | \param Format A substitute string |
278 | \return An output iterator pointing just after the last inserted character or |
279 | a modified copy of the input |
280 | |
281 | \note The second variant of this function provides the strong exception-safety guarantee |
282 | */ |
283 | template< |
284 | typename OutputIteratorT, |
285 | typename Range1T, |
286 | typename Range2T, |
287 | typename Range3T> |
288 | inline OutputIteratorT replace_last_copy( |
289 | OutputIteratorT Output, |
290 | const Range1T& Input, |
291 | const Range2T& Search, |
292 | const Range3T& Format ) |
293 | { |
294 | return ::boost::algorithm::find_format_copy( |
295 | Output, |
296 | Input, |
297 | ::boost::algorithm::last_finder(Search), |
298 | ::boost::algorithm::const_formatter(Format) ); |
299 | } |
300 | |
301 | //! Replace last algorithm |
302 | /*! |
303 | \overload |
304 | */ |
305 | template<typename SequenceT, typename Range1T, typename Range2T> |
306 | inline SequenceT replace_last_copy( |
307 | const SequenceT& Input, |
308 | const Range1T& Search, |
309 | const Range2T& Format ) |
310 | { |
311 | return ::boost::algorithm::find_format_copy( |
312 | Input, |
313 | ::boost::algorithm::last_finder(Search), |
314 | ::boost::algorithm::const_formatter(Format) ); |
315 | } |
316 | |
317 | //! Replace last algorithm |
318 | /*! |
319 | Replace the last match of the search string in the input |
320 | with the format string. Input sequence is modified in-place. |
321 | |
322 | \param Input An input string |
323 | \param Search A substring to be searched for |
324 | \param Format A substitute string |
325 | */ |
326 | template<typename SequenceT, typename Range1T, typename Range2T> |
327 | inline void replace_last( |
328 | SequenceT& Input, |
329 | const Range1T& Search, |
330 | const Range2T& Format ) |
331 | { |
332 | ::boost::algorithm::find_format( |
333 | Input, |
334 | ::boost::algorithm::last_finder(Search), |
335 | ::boost::algorithm::const_formatter(Format) ); |
336 | } |
337 | |
338 | // replace_last ( case insensitive ) -----------------------------------------------// |
339 | |
340 | //! Replace last algorithm ( case insensitive ) |
341 | /*! |
342 | Replace the last match of the search string in the input |
343 | with the format string. |
344 | The result is a modified copy of the input. It is returned as a sequence |
345 | or copied to the output iterator. |
346 | Searching is case insensitive. |
347 | |
348 | \param Output An output iterator to which the result will be copied |
349 | \param Input An input string |
350 | \param Search A substring to be searched for |
351 | \param Format A substitute string |
352 | \param Loc A locale used for case insensitive comparison |
353 | \return An output iterator pointing just after the last inserted character or |
354 | a modified copy of the input |
355 | |
356 | \note The second variant of this function provides the strong exception-safety guarantee |
357 | */ |
358 | template< |
359 | typename OutputIteratorT, |
360 | typename Range1T, |
361 | typename Range2T, |
362 | typename Range3T> |
363 | inline OutputIteratorT ireplace_last_copy( |
364 | OutputIteratorT Output, |
365 | const Range1T& Input, |
366 | const Range2T& Search, |
367 | const Range3T& Format, |
368 | const std::locale& Loc=std::locale() ) |
369 | { |
370 | return ::boost::algorithm::find_format_copy( |
371 | Output, |
372 | Input, |
373 | ::boost::algorithm::last_finder(Search, is_iequal(Loc)), |
374 | ::boost::algorithm::const_formatter(Format) ); |
375 | } |
376 | |
377 | //! Replace last algorithm ( case insensitive ) |
378 | /*! |
379 | \overload |
380 | */ |
381 | template<typename SequenceT, typename Range1T, typename Range2T> |
382 | inline SequenceT ireplace_last_copy( |
383 | const SequenceT& Input, |
384 | const Range1T& Search, |
385 | const Range2T& Format, |
386 | const std::locale& Loc=std::locale() ) |
387 | { |
388 | return ::boost::algorithm::find_format_copy( |
389 | Input, |
390 | ::boost::algorithm::last_finder(Search, is_iequal(Loc)), |
391 | ::boost::algorithm::const_formatter(Format) ); |
392 | } |
393 | |
394 | //! Replace last algorithm ( case insensitive ) |
395 | /*! |
396 | Replace the last match of the search string in the input |
397 | with the format string.The input sequence is modified in-place. |
398 | Searching is case insensitive. |
399 | |
400 | \param Input An input string |
401 | \param Search A substring to be searched for |
402 | \param Format A substitute string |
403 | \param Loc A locale used for case insensitive comparison |
404 | */ |
405 | template<typename SequenceT, typename Range1T, typename Range2T> |
406 | inline void ireplace_last( |
407 | SequenceT& Input, |
408 | const Range1T& Search, |
409 | const Range2T& Format, |
410 | const std::locale& Loc=std::locale() ) |
411 | { |
412 | ::boost::algorithm::find_format( |
413 | Input, |
414 | ::boost::algorithm::last_finder(Search, is_iequal(Loc)), |
415 | ::boost::algorithm::const_formatter(Format) ); |
416 | } |
417 | |
418 | // replace_nth --------------------------------------------------------------------// |
419 | |
420 | //! Replace nth algorithm |
421 | /*! |
422 | Replace an Nth (zero-indexed) match of the search string in the input |
423 | with the format string. |
424 | The result is a modified copy of the input. It is returned as a sequence |
425 | or copied to the output iterator. |
426 | |
427 | \param Output An output iterator to which the result will be copied |
428 | \param Input An input string |
429 | \param Search A substring to be searched for |
430 | \param Nth An index of the match to be replaced. The index is 0-based. |
431 | For negative N, matches are counted from the end of string. |
432 | \param Format A substitute string |
433 | \return An output iterator pointing just after the last inserted character or |
434 | a modified copy of the input |
435 | |
436 | \note The second variant of this function provides the strong exception-safety guarantee |
437 | */ |
438 | template< |
439 | typename OutputIteratorT, |
440 | typename Range1T, |
441 | typename Range2T, |
442 | typename Range3T> |
443 | inline OutputIteratorT replace_nth_copy( |
444 | OutputIteratorT Output, |
445 | const Range1T& Input, |
446 | const Range2T& Search, |
447 | int Nth, |
448 | const Range3T& Format ) |
449 | { |
450 | return ::boost::algorithm::find_format_copy( |
451 | Output, |
452 | Input, |
453 | ::boost::algorithm::nth_finder(Search, Nth), |
454 | ::boost::algorithm::const_formatter(Format) ); |
455 | } |
456 | |
457 | //! Replace nth algorithm |
458 | /*! |
459 | \overload |
460 | */ |
461 | template<typename SequenceT, typename Range1T, typename Range2T> |
462 | inline SequenceT replace_nth_copy( |
463 | const SequenceT& Input, |
464 | const Range1T& Search, |
465 | int Nth, |
466 | const Range2T& Format ) |
467 | { |
468 | return ::boost::algorithm::find_format_copy( |
469 | Input, |
470 | ::boost::algorithm::nth_finder(Search, Nth), |
471 | ::boost::algorithm::const_formatter(Format) ); |
472 | } |
473 | |
474 | //! Replace nth algorithm |
475 | /*! |
476 | Replace an Nth (zero-indexed) match of the search string in the input |
477 | with the format string. Input sequence is modified in-place. |
478 | |
479 | \param Input An input string |
480 | \param Search A substring to be searched for |
481 | \param Nth An index of the match to be replaced. The index is 0-based. |
482 | For negative N, matches are counted from the end of string. |
483 | \param Format A substitute string |
484 | */ |
485 | template<typename SequenceT, typename Range1T, typename Range2T> |
486 | inline void replace_nth( |
487 | SequenceT& Input, |
488 | const Range1T& Search, |
489 | int Nth, |
490 | const Range2T& Format ) |
491 | { |
492 | ::boost::algorithm::find_format( |
493 | Input, |
494 | ::boost::algorithm::nth_finder(Search, Nth), |
495 | ::boost::algorithm::const_formatter(Format) ); |
496 | } |
497 | |
498 | // replace_nth ( case insensitive ) -----------------------------------------------// |
499 | |
500 | //! Replace nth algorithm ( case insensitive ) |
501 | /*! |
502 | Replace an Nth (zero-indexed) match of the search string in the input |
503 | with the format string. |
504 | The result is a modified copy of the input. It is returned as a sequence |
505 | or copied to the output iterator. |
506 | Searching is case insensitive. |
507 | |
508 | \param Output An output iterator to which the result will be copied |
509 | \param Input An input string |
510 | \param Search A substring to be searched for |
511 | \param Nth An index of the match to be replaced. The index is 0-based. |
512 | For negative N, matches are counted from the end of string. |
513 | \param Format A substitute string |
514 | \param Loc A locale used for case insensitive comparison |
515 | \return An output iterator pointing just after the last inserted character or |
516 | a modified copy of the input |
517 | |
518 | \note The second variant of this function provides the strong exception-safety guarantee |
519 | */ |
520 | template< |
521 | typename OutputIteratorT, |
522 | typename Range1T, |
523 | typename Range2T, |
524 | typename Range3T> |
525 | inline OutputIteratorT ireplace_nth_copy( |
526 | OutputIteratorT Output, |
527 | const Range1T& Input, |
528 | const Range2T& Search, |
529 | int Nth, |
530 | const Range3T& Format, |
531 | const std::locale& Loc=std::locale() ) |
532 | { |
533 | return ::boost::algorithm::find_format_copy( |
534 | Output, |
535 | Input, |
536 | ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc) ), |
537 | ::boost::algorithm::const_formatter(Format) ); |
538 | } |
539 | |
540 | //! Replace nth algorithm ( case insensitive ) |
541 | /*! |
542 | \overload |
543 | */ |
544 | template<typename SequenceT, typename Range1T, typename Range2T> |
545 | inline SequenceT ireplace_nth_copy( |
546 | const SequenceT& Input, |
547 | const Range1T& Search, |
548 | int Nth, |
549 | const Range2T& Format, |
550 | const std::locale& Loc=std::locale() ) |
551 | { |
552 | return ::boost::algorithm::find_format_copy( |
553 | Input, |
554 | ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), |
555 | ::boost::algorithm::const_formatter(Format) ); |
556 | } |
557 | |
558 | //! Replace nth algorithm ( case insensitive ) |
559 | /*! |
560 | Replace an Nth (zero-indexed) match of the search string in the input |
561 | with the format string. Input sequence is modified in-place. |
562 | Searching is case insensitive. |
563 | |
564 | \param Input An input string |
565 | \param Search A substring to be searched for |
566 | \param Nth An index of the match to be replaced. The index is 0-based. |
567 | For negative N, matches are counted from the end of string. |
568 | \param Format A substitute string |
569 | \param Loc A locale used for case insensitive comparison |
570 | */ |
571 | template<typename SequenceT, typename Range1T, typename Range2T> |
572 | inline void ireplace_nth( |
573 | SequenceT& Input, |
574 | const Range1T& Search, |
575 | int Nth, |
576 | const Range2T& Format, |
577 | const std::locale& Loc=std::locale() ) |
578 | { |
579 | ::boost::algorithm::find_format( |
580 | Input, |
581 | ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), |
582 | ::boost::algorithm::const_formatter(Format) ); |
583 | } |
584 | |
585 | // replace_all --------------------------------------------------------------------// |
586 | |
587 | //! Replace all algorithm |
588 | /*! |
589 | Replace all occurrences of the search string in the input |
590 | with the format string. |
591 | The result is a modified copy of the input. It is returned as a sequence |
592 | or copied to the output iterator. |
593 | |
594 | \param Output An output iterator to which the result will be copied |
595 | \param Input An input string |
596 | \param Search A substring to be searched for |
597 | \param Format A substitute string |
598 | \return An output iterator pointing just after the last inserted character or |
599 | a modified copy of the input |
600 | |
601 | \note The second variant of this function provides the strong exception-safety guarantee |
602 | */ |
603 | template< |
604 | typename OutputIteratorT, |
605 | typename Range1T, |
606 | typename Range2T, |
607 | typename Range3T> |
608 | inline OutputIteratorT replace_all_copy( |
609 | OutputIteratorT Output, |
610 | const Range1T& Input, |
611 | const Range2T& Search, |
612 | const Range3T& Format ) |
613 | { |
614 | return ::boost::algorithm::find_format_all_copy( |
615 | Output, |
616 | Input, |
617 | ::boost::algorithm::first_finder(Search), |
618 | ::boost::algorithm::const_formatter(Format) ); |
619 | } |
620 | |
621 | //! Replace all algorithm |
622 | /*! |
623 | \overload |
624 | */ |
625 | template<typename SequenceT, typename Range1T, typename Range2T> |
626 | inline SequenceT replace_all_copy( |
627 | const SequenceT& Input, |
628 | const Range1T& Search, |
629 | const Range2T& Format ) |
630 | { |
631 | return ::boost::algorithm::find_format_all_copy( |
632 | Input, |
633 | ::boost::algorithm::first_finder(Search), |
634 | ::boost::algorithm::const_formatter(Format) ); |
635 | } |
636 | |
637 | //! Replace all algorithm |
638 | /*! |
639 | Replace all occurrences of the search string in the input |
640 | with the format string. The input sequence is modified in-place. |
641 | |
642 | \param Input An input string |
643 | \param Search A substring to be searched for |
644 | \param Format A substitute string |
645 | */ |
646 | template<typename SequenceT, typename Range1T, typename Range2T> |
647 | inline void replace_all( |
648 | SequenceT& Input, |
649 | const Range1T& Search, |
650 | const Range2T& Format ) |
651 | { |
652 | ::boost::algorithm::find_format_all( |
653 | Input, |
654 | ::boost::algorithm::first_finder(Search), |
655 | ::boost::algorithm::const_formatter(Format) ); |
656 | } |
657 | |
658 | // replace_all ( case insensitive ) -----------------------------------------------// |
659 | |
660 | //! Replace all algorithm ( case insensitive ) |
661 | /*! |
662 | Replace all occurrences of the search string in the input |
663 | with the format string. |
664 | The result is a modified copy of the input. It is returned as a sequence |
665 | or copied to the output iterator. |
666 | Searching is case insensitive. |
667 | |
668 | \param Output An output iterator to which the result will be copied |
669 | \param Input An input string |
670 | \param Search A substring to be searched for |
671 | \param Format A substitute string |
672 | \param Loc A locale used for case insensitive comparison |
673 | \return An output iterator pointing just after the last inserted character or |
674 | a modified copy of the input |
675 | |
676 | \note The second variant of this function provides the strong exception-safety guarantee |
677 | */ |
678 | template< |
679 | typename OutputIteratorT, |
680 | typename Range1T, |
681 | typename Range2T, |
682 | typename Range3T> |
683 | inline OutputIteratorT ireplace_all_copy( |
684 | OutputIteratorT Output, |
685 | const Range1T& Input, |
686 | const Range2T& Search, |
687 | const Range3T& Format, |
688 | const std::locale& Loc=std::locale() ) |
689 | { |
690 | return ::boost::algorithm::find_format_all_copy( |
691 | Output, |
692 | Input, |
693 | ::boost::algorithm::first_finder(Search, is_iequal(Loc)), |
694 | ::boost::algorithm::const_formatter(Format) ); |
695 | } |
696 | |
697 | //! Replace all algorithm ( case insensitive ) |
698 | /*! |
699 | \overload |
700 | */ |
701 | template<typename SequenceT, typename Range1T, typename Range2T> |
702 | inline SequenceT ireplace_all_copy( |
703 | const SequenceT& Input, |
704 | const Range1T& Search, |
705 | const Range2T& Format, |
706 | const std::locale& Loc=std::locale() ) |
707 | { |
708 | return ::boost::algorithm::find_format_all_copy( |
709 | Input, |
710 | ::boost::algorithm::first_finder(Search, is_iequal(Loc)), |
711 | ::boost::algorithm::const_formatter(Format) ); |
712 | } |
713 | |
714 | //! Replace all algorithm ( case insensitive ) |
715 | /*! |
716 | Replace all occurrences of the search string in the input |
717 | with the format string.The input sequence is modified in-place. |
718 | Searching is case insensitive. |
719 | |
720 | \param Input An input string |
721 | \param Search A substring to be searched for |
722 | \param Format A substitute string |
723 | \param Loc A locale used for case insensitive comparison |
724 | */ |
725 | template<typename SequenceT, typename Range1T, typename Range2T> |
726 | inline void ireplace_all( |
727 | SequenceT& Input, |
728 | const Range1T& Search, |
729 | const Range2T& Format, |
730 | const std::locale& Loc=std::locale() ) |
731 | { |
732 | ::boost::algorithm::find_format_all( |
733 | Input, |
734 | ::boost::algorithm::first_finder(Search, is_iequal(Loc)), |
735 | ::boost::algorithm::const_formatter(Format) ); |
736 | } |
737 | |
738 | // replace_head --------------------------------------------------------------------// |
739 | |
740 | //! Replace head algorithm |
741 | /*! |
742 | Replace the head of the input with the given format string. |
743 | The head is a prefix of a string of given size. |
744 | If the sequence is shorter then required, whole string if |
745 | considered to be the head. |
746 | The result is a modified copy of the input. It is returned as a sequence |
747 | or copied to the output iterator. |
748 | |
749 | \param Output An output iterator to which the result will be copied |
750 | \param Input An input string |
751 | \param N Length of the head. |
752 | For N>=0, at most N characters are extracted. |
753 | For N<0, size(Input)-|N| characters are extracted. |
754 | \param Format A substitute string |
755 | \return An output iterator pointing just after the last inserted character or |
756 | a modified copy of the input |
757 | |
758 | \note The second variant of this function provides the strong exception-safety guarantee |
759 | */ |
760 | template< |
761 | typename OutputIteratorT, |
762 | typename Range1T, |
763 | typename Range2T> |
764 | inline OutputIteratorT replace_head_copy( |
765 | OutputIteratorT Output, |
766 | const Range1T& Input, |
767 | int N, |
768 | const Range2T& Format ) |
769 | { |
770 | return ::boost::algorithm::find_format_copy( |
771 | Output, |
772 | Input, |
773 | ::boost::algorithm::head_finder(N), |
774 | ::boost::algorithm::const_formatter(Format) ); |
775 | } |
776 | |
777 | //! Replace head algorithm |
778 | /*! |
779 | \overload |
780 | */ |
781 | template<typename SequenceT, typename RangeT> |
782 | inline SequenceT replace_head_copy( |
783 | const SequenceT& Input, |
784 | int N, |
785 | const RangeT& Format ) |
786 | { |
787 | return ::boost::algorithm::find_format_copy( |
788 | Input, |
789 | ::boost::algorithm::head_finder(N), |
790 | ::boost::algorithm::const_formatter(Format) ); |
791 | } |
792 | |
793 | //! Replace head algorithm |
794 | /*! |
795 | Replace the head of the input with the given format string. |
796 | The head is a prefix of a string of given size. |
797 | If the sequence is shorter then required, the whole string is |
798 | considered to be the head. The input sequence is modified in-place. |
799 | |
800 | \param Input An input string |
801 | \param N Length of the head. |
802 | For N>=0, at most N characters are extracted. |
803 | For N<0, size(Input)-|N| characters are extracted. |
804 | \param Format A substitute string |
805 | */ |
806 | template<typename SequenceT, typename RangeT> |
807 | inline void ( |
808 | SequenceT& Input, |
809 | int N, |
810 | const RangeT& Format ) |
811 | { |
812 | ::boost::algorithm::find_format( |
813 | Input, |
814 | ::boost::algorithm::head_finder(N), |
815 | ::boost::algorithm::const_formatter(Format) ); |
816 | } |
817 | |
818 | // replace_tail --------------------------------------------------------------------// |
819 | |
820 | //! Replace tail algorithm |
821 | /*! |
822 | Replace the tail of the input with the given format string. |
823 | The tail is a suffix of a string of given size. |
824 | If the sequence is shorter then required, whole string is |
825 | considered to be the tail. |
826 | The result is a modified copy of the input. It is returned as a sequence |
827 | or copied to the output iterator. |
828 | |
829 | \param Output An output iterator to which the result will be copied |
830 | \param Input An input string |
831 | \param N Length of the tail. |
832 | For N>=0, at most N characters are extracted. |
833 | For N<0, size(Input)-|N| characters are extracted. |
834 | \param Format A substitute string |
835 | \return An output iterator pointing just after the last inserted character or |
836 | a modified copy of the input |
837 | |
838 | \note The second variant of this function provides the strong exception-safety guarantee |
839 | */ |
840 | template< |
841 | typename OutputIteratorT, |
842 | typename Range1T, |
843 | typename Range2T> |
844 | inline OutputIteratorT replace_tail_copy( |
845 | OutputIteratorT Output, |
846 | const Range1T& Input, |
847 | int N, |
848 | const Range2T& Format ) |
849 | { |
850 | return ::boost::algorithm::find_format_copy( |
851 | Output, |
852 | Input, |
853 | ::boost::algorithm::tail_finder(N), |
854 | ::boost::algorithm::const_formatter(Format) ); |
855 | } |
856 | |
857 | //! Replace tail algorithm |
858 | /*! |
859 | \overload |
860 | */ |
861 | template<typename SequenceT, typename RangeT> |
862 | inline SequenceT replace_tail_copy( |
863 | const SequenceT& Input, |
864 | int N, |
865 | const RangeT& Format ) |
866 | { |
867 | return ::boost::algorithm::find_format_copy( |
868 | Input, |
869 | ::boost::algorithm::tail_finder(N), |
870 | ::boost::algorithm::const_formatter(Format) ); |
871 | } |
872 | |
873 | //! Replace tail algorithm |
874 | /*! |
875 | Replace the tail of the input with the given format sequence. |
876 | The tail is a suffix of a string of given size. |
877 | If the sequence is shorter then required, the whole string is |
878 | considered to be the tail. The input sequence is modified in-place. |
879 | |
880 | \param Input An input string |
881 | \param N Length of the tail. |
882 | For N>=0, at most N characters are extracted. |
883 | For N<0, size(Input)-|N| characters are extracted. |
884 | \param Format A substitute string |
885 | */ |
886 | template<typename SequenceT, typename RangeT> |
887 | inline void replace_tail( |
888 | SequenceT& Input, |
889 | int N, |
890 | const RangeT& Format ) |
891 | { |
892 | ::boost::algorithm::find_format( |
893 | Input, |
894 | ::boost::algorithm::tail_finder(N), |
895 | ::boost::algorithm::const_formatter(Format) ); |
896 | } |
897 | |
898 | } // namespace algorithm |
899 | |
900 | // pull names to the boost namespace |
901 | using algorithm::replace_range_copy; |
902 | using algorithm::replace_range; |
903 | using algorithm::replace_first_copy; |
904 | using algorithm::replace_first; |
905 | using algorithm::ireplace_first_copy; |
906 | using algorithm::ireplace_first; |
907 | using algorithm::replace_last_copy; |
908 | using algorithm::replace_last; |
909 | using algorithm::ireplace_last_copy; |
910 | using algorithm::ireplace_last; |
911 | using algorithm::replace_nth_copy; |
912 | using algorithm::replace_nth; |
913 | using algorithm::ireplace_nth_copy; |
914 | using algorithm::ireplace_nth; |
915 | using algorithm::replace_all_copy; |
916 | using algorithm::replace_all; |
917 | using algorithm::ireplace_all_copy; |
918 | using algorithm::ireplace_all; |
919 | using algorithm::replace_head_copy; |
920 | using algorithm::replace_head; |
921 | using algorithm::replace_tail_copy; |
922 | using algorithm::replace_tail; |
923 | |
924 | } // namespace boost |
925 | |
926 | #endif // BOOST_REPLACE_HPP |
927 | |