|
@@ -306,21 +306,17 @@ filter :: proc(s: $S/[]$U, f: proc(U) -> bool, allocator := context.allocator) -
|
|
|
|
|
|
scanner :: proc (s: $S/[]$U, initializer: $V, f: proc(V, U)->V, allocator := context.allocator) -> []V {
|
|
|
if len(s) == 0 { return {} }
|
|
|
- p := as_ptr(s)
|
|
|
|
|
|
res := make([]V, len(s), allocator)
|
|
|
-
|
|
|
+ p := as_ptr(s)
|
|
|
q := as_ptr(res)
|
|
|
- l := len(res)
|
|
|
-
|
|
|
- r := initializer
|
|
|
+ r := initializer
|
|
|
|
|
|
- for l > 0 {
|
|
|
- r = f(r, p^)
|
|
|
- q^ = r
|
|
|
- p = intrinsics.ptr_offset(p, 1)
|
|
|
- q = intrinsics.ptr_offset(q, 1)
|
|
|
- l -= 1
|
|
|
+ for l := len(s); l > 0; l -= 1 {
|
|
|
+ r = f(r, p[0])
|
|
|
+ q[0] = r
|
|
|
+ p = p[1:]
|
|
|
+ q = q[1:]
|
|
|
}
|
|
|
|
|
|
return res
|