@@ -435,12 +435,14 @@ pub fn slice<'a>(s: &'a str, begin: uint, end: uint) -> &'a str {
435
435
}
436
436
437
437
/// Splits a string into substrings at each occurrence of a given character
438
- pub fn each_split_char ( s : & ' a str , sep : char , it : & fn ( & ' a str ) -> bool ) {
438
+ pub fn each_split_char < ' a > ( s : & ' a str , sep : char , it : & fn ( & ' a str ) -> bool ) {
439
439
each_split_char_inner ( s, sep, len ( s) , true , true , it)
440
440
}
441
441
442
442
/// Like `each_split_char`, but a trailing empty string is omitted
443
- pub fn each_split_char_no_trailing ( s : & ' a str , sep : char , it : & fn ( & ' a str ) -> bool ) {
443
+ pub fn each_split_char_no_trailing < ' a > ( s : & ' a str ,
444
+ sep : char ,
445
+ it : & fn ( & ' a str ) -> bool ) {
444
446
each_split_char_inner ( s, sep, len ( s) , true , false , it)
445
447
}
446
448
@@ -450,17 +452,26 @@ pub fn each_split_char_no_trailing(s: &'a str, sep: char, it: &fn(&'a str) -> bo
450
452
*
451
453
* The character must be a valid UTF-8/ASCII character
452
454
*/
453
- pub fn each_splitn_char ( s : & ' a str , sep : char , count : uint , it : & fn ( & ' a str ) -> bool ) {
455
+ pub fn each_splitn_char < ' a > ( s : & ' a str ,
456
+ sep : char ,
457
+ count : uint ,
458
+ it : & fn ( & ' a str ) -> bool ) {
454
459
each_split_char_inner ( s, sep, count, true , true , it)
455
460
}
456
461
457
462
/// Like `each_split_char`, but omits empty strings
458
- pub fn each_split_char_nonempty ( s : & ' a str , sep : char , it : & fn ( & ' a str ) -> bool ) {
463
+ pub fn each_split_char_nonempty < ' a > ( s : & ' a str ,
464
+ sep : char ,
465
+ it : & fn ( & ' a str ) -> bool ) {
459
466
each_split_char_inner ( s, sep, len ( s) , false , false , it)
460
467
}
461
468
462
- fn each_split_char_inner ( s : & ' a str , sep : char , count : uint , allow_empty : bool ,
463
- allow_trailing_empty : bool , it : & fn ( & ' a str ) -> bool ) {
469
+ fn each_split_char_inner < ' a > ( s : & ' a str ,
470
+ sep : char ,
471
+ count : uint ,
472
+ allow_empty : bool ,
473
+ allow_trailing_empty : bool ,
474
+ it : & fn ( & ' a str ) -> bool ) {
464
475
if sep < 128 u as char {
465
476
let b = sep as u8 , l = len ( s) ;
466
477
let mut done = 0 u;
@@ -485,30 +496,43 @@ fn each_split_char_inner(s: &'a str, sep: char, count: uint, allow_empty: bool,
485
496
}
486
497
487
498
/// Splits a string into substrings using a character function
488
- pub fn each_split ( s : & ' a str , sepfn : & fn ( char ) -> bool , it : & fn ( & ' a str ) -> bool ) {
499
+ pub fn each_split < ' a > ( s : & ' a str ,
500
+ sepfn : & fn ( char ) -> bool ,
501
+ it : & fn ( & ' a str ) -> bool ) {
489
502
each_split_inner ( s, sepfn, len ( s) , true , true , it)
490
503
}
491
504
492
505
/// Like `each_split`, but a trailing empty string is omitted
493
- pub fn each_split_no_trailing ( s : & ' a str , sepfn : & fn ( char ) -> bool , it : & fn ( & ' a str ) -> bool ) {
506
+ pub fn each_split_no_trailing < ' a > ( s : & ' a str ,
507
+ sepfn : & fn ( char ) -> bool ,
508
+ it : & fn ( & ' a str ) -> bool ) {
494
509
each_split_inner ( s, sepfn, len ( s) , true , false , it)
495
510
}
496
511
497
512
/**
498
513
* Splits a string into substrings using a character function, cutting at
499
514
* most `count` times.
500
515
*/
501
- pub fn each_splitn ( s : & ' a str , sepfn : & fn ( char ) -> bool , count : uint , it : & fn ( & ' a str ) -> bool ) {
516
+ pub fn each_splitn < ' a > ( s : & ' a str ,
517
+ sepfn : & fn ( char ) -> bool ,
518
+ count : uint ,
519
+ it : & fn ( & ' a str ) -> bool ) {
502
520
each_split_inner ( s, sepfn, count, true , true , it)
503
521
}
504
522
505
523
/// Like `each_split`, but omits empty strings
506
- pub fn each_split_nonempty ( s : & ' a str , sepfn : & fn ( char ) -> bool , it : & fn ( & ' a str ) -> bool ) {
524
+ pub fn each_split_nonempty < ' a > ( s : & ' a str ,
525
+ sepfn : & fn ( char ) -> bool ,
526
+ it : & fn ( & ' a str ) -> bool ) {
507
527
each_split_inner ( s, sepfn, len ( s) , false , false , it)
508
528
}
509
529
510
- fn each_split_inner ( s : & ' a str , sepfn : & fn ( cc : char ) -> bool , count : uint ,
511
- allow_empty : bool , allow_trailing_empty : bool , it : & fn ( & ' a str ) -> bool ) {
530
+ fn each_split_inner < ' a > ( s : & ' a str ,
531
+ sepfn : & fn ( cc : char ) -> bool ,
532
+ count : uint ,
533
+ allow_empty : bool ,
534
+ allow_trailing_empty : bool ,
535
+ it : & fn ( & ' a str ) -> bool ) {
512
536
let l = len ( s) ;
513
537
let mut i = 0 u, start = 0 u, done = 0 u;
514
538
while i < l && done < count {
@@ -632,15 +656,15 @@ pub fn levdistance(s: &str, t: &str) -> uint {
632
656
/**
633
657
* Splits a string into substrings separated by LF ('\n').
634
658
*/
635
- pub fn each_line ( s : & ' a str , it : & fn ( & ' a str ) -> bool ) {
659
+ pub fn each_line < ' a > ( s : & ' a str , it : & fn ( & ' a str ) -> bool ) {
636
660
each_split_char_no_trailing ( s, '\n' , it)
637
661
}
638
662
639
663
/**
640
664
* Splits a string into substrings separated by LF ('\n')
641
665
* and/or CR LF ("\r\n")
642
666
*/
643
- pub fn each_line_any ( s : & ' a str , it : & fn ( & ' a str ) -> bool ) {
667
+ pub fn each_line_any < ' a > ( s : & ' a str , it : & fn ( & ' a str ) -> bool ) {
644
668
for each_line( s) |s| {
645
669
let l = s. len ( ) ;
646
670
if l > 0 u && s[ l - 1 u] == '\r' as u8 {
@@ -652,7 +676,7 @@ pub fn each_line_any(s: &'a str, it: &fn(&'a str) -> bool) {
652
676
}
653
677
654
678
/// Splits a string into substrings separated by whitespace
655
- pub fn each_word ( s : & ' a str , it : & fn ( & ' a str ) -> bool ) {
679
+ pub fn each_word < ' a > ( s : & ' a str , it : & fn ( & ' a str ) -> bool ) {
656
680
each_split_nonempty ( s, char:: is_whitespace, it)
657
681
}
658
682
@@ -665,7 +689,9 @@ pub fn each_word(s: &'a str, it: &fn(&'a str) -> bool) {
665
689
* Fails during iteration if the string contains a non-whitespace
666
690
* sequence longer than the limit.
667
691
*/
668
- pub fn each_split_within( ss : & ' a str , lim : uint , it : & fn ( & ' a str ) -> bool ) {
692
+ pub fn each_split_within< ' a > ( ss : & ' a str ,
693
+ lim : uint ,
694
+ it : & fn ( & ' a str ) -> bool ) {
669
695
// Just for fun, let's write this as an state machine:
670
696
671
697
enum SplitWithinState {
0 commit comments