@@ -33,6 +33,7 @@ export grow;
33
33
export grow_fn;
34
34
export grow_set;
35
35
export map;
36
+ export mapi;
36
37
export map2;
37
38
export flat_map;
38
39
export filter_map;
@@ -440,13 +441,23 @@ fn grow_set<T: copy>(&v: [mut T], index: uint, initval: T, val: T) {
440
441
#[ doc = "
441
442
Apply a function to each element of a vector and return the results
442
443
" ]
443
- fn map < T , U > ( v : [ T ] , f : fn ( T ) -> U ) -> [ U ] {
444
+ fn map < T , U > ( v : [ const T ] / & , f : fn ( T ) -> U ) -> [ U ] {
444
445
let mut result = [ ] ;
445
446
reserve ( result, len ( v) ) ;
446
447
for each( v) { |elem| result += [ f ( elem) ] ; }
447
448
ret result;
448
449
}
449
450
451
+ #[ doc = "
452
+ Apply a function to each element of a vector and return the results
453
+ " ]
454
+ fn mapi < T , U > ( v : [ const T ] /& , f : fn ( uint , T ) -> U ) -> [ U ] {
455
+ let mut result = [ ] ;
456
+ reserve ( result, len ( v) ) ;
457
+ for eachi( v) { |i, elem| result += [ f ( i, elem) ] ; }
458
+ ret result;
459
+ }
460
+
450
461
#[ doc = "
451
462
Apply a function to each element of a vector and return a concatenation
452
463
of each result vector
@@ -537,7 +548,7 @@ fn foldl<T: copy, U>(z: T, v: [const U], p: fn(T, U) -> T) -> T {
537
548
}
538
549
539
550
#[ doc = "Reduce a vector from right to left" ]
540
- fn foldr < T , U : copy > ( v : [ const T ] , z : U , p : fn ( T , U ) -> U ) -> U {
551
+ fn foldr < T , U : copy > ( v : [ const T ] / & , z : U , p : fn ( T , U ) -> U ) -> U {
541
552
let mut accum = z;
542
553
riter ( v) { |elt|
543
554
accum = p ( elt, accum) ;
@@ -550,7 +561,7 @@ Return true if a predicate matches any elements
550
561
551
562
If the vector contains no elements then false is returned.
552
563
" ]
553
- fn any < T > ( v : [ T ] , f : fn ( T ) -> bool ) -> bool {
564
+ fn any < T > ( v : [ const T ] / & , f : fn ( T ) -> bool ) -> bool {
554
565
for each( v) { |elem| if f ( elem) { ret true ; } }
555
566
ret false ;
556
567
}
@@ -560,7 +571,7 @@ Return true if a predicate matches any elements in both vectors.
560
571
561
572
If the vectors contains no elements then false is returned.
562
573
" ]
563
- fn any2 < T , U > ( v0 : [ const T ] , v1 : [ U ] , f : fn ( T , U ) -> bool ) -> bool {
574
+ fn any2 < T , U > ( v0 : [ const T ] / & , v1 : [ const U ] / & , f : fn ( T , U ) -> bool ) -> bool {
564
575
let v0_len = len ( v0) ;
565
576
let v1_len = len ( v1) ;
566
577
let mut i = 0 u;
@@ -576,7 +587,7 @@ Return true if a predicate matches all elements
576
587
577
588
If the vector contains no elements then true is returned.
578
589
" ]
579
- fn all < T > ( v : [ T ] , f : fn ( T ) -> bool ) -> bool {
590
+ fn all < T > ( v : [ const T ] / & , f : fn ( T ) -> bool ) -> bool {
580
591
for each( v) { |elem| if !f ( elem) { ret false ; } }
581
592
ret true ;
582
593
}
@@ -586,7 +597,7 @@ Return true if a predicate matches all elements
586
597
587
598
If the vector contains no elements then true is returned.
588
599
" ]
589
- fn alli < T > ( v : [ T ] , f : fn ( uint , T ) -> bool ) -> bool {
600
+ fn alli < T > ( v : [ const T ] / & , f : fn ( uint , T ) -> bool ) -> bool {
590
601
for eachi( v) { |i, elem| if !f ( i, elem) { ret false ; } }
591
602
ret true ;
592
603
}
@@ -596,7 +607,7 @@ Return true if a predicate matches all elements in both vectors.
596
607
597
608
If the vectors are not the same size then false is returned.
598
609
" ]
599
- fn all2 < T , U > ( v0 : [ const T ] , v1 : [ const U ] , f : fn ( T , U ) -> bool ) -> bool {
610
+ fn all2 < T , U > ( v0 : [ const T ] / & , v1 : [ const U ] / & , f : fn ( T , U ) -> bool ) -> bool {
600
611
let v0_len = len ( v0) ;
601
612
if v0_len != len ( v1) { ret false ; }
602
613
let mut i = 0 u;
@@ -899,7 +910,7 @@ Iterates over a vector in reverse
899
910
Iterates over vector `v` and, for each element, calls function `f` with the
900
911
element's value.
901
912
" ]
902
- fn riter < T > ( v : [ const T ] , f : fn ( T ) ) {
913
+ fn riter < T > ( v : [ const T ] / & , f : fn ( T ) ) {
903
914
riteri ( v) { |_i, v| f ( v) }
904
915
}
905
916
@@ -909,7 +920,7 @@ Iterates over a vector's elements and indexes in reverse
909
920
Iterates over vector `v` and, for each element, calls function `f` with the
910
921
element's value and index.
911
922
" ]
912
- fn riteri < T > ( v : [ const T ] , f : fn ( uint , T ) ) {
923
+ fn riteri < T > ( v : [ const T ] / & , f : fn ( uint , T ) ) {
913
924
let mut i = len ( v) ;
914
925
while 0 u < i {
915
926
i -= 1 u;
@@ -1115,8 +1126,7 @@ impl extensions<T> for [T] {
1115
1126
and return the results
1116
1127
" ]
1117
1128
fn mapi < U > ( f : fn ( uint , T ) -> U ) -> [ U ] {
1118
- let mut i = 0 u;
1119
- self . map { |e| i += 1 u; f ( i - 1 u, e) }
1129
+ mapi ( self , f)
1120
1130
}
1121
1131
#[ doc = "Returns true if the function returns true for all elements.
1122
1132
0 commit comments