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

source code of boost/boost/algorithm/string/erase.hpp