diff --git a/src/com/kemsky/Stream.as b/src/com/kemsky/Stream.as index fd304cf..c2b5159 100644 --- a/src/com/kemsky/Stream.as +++ b/src/com/kemsky/Stream.as @@ -65,6 +65,19 @@ package com.kemsky this.source = source == null ? [] : source; } +// todo +// public function remove(index:int, count:uint = 1):Stream +// { +// source.splice.apply(null, [index, count].concat()); +// return this; +// } +// +// public function insert(index:int, item:*, ...rest):Stream +// { +// source.splice.apply(null, [index, 0, item].concat()); +// return this; +// } + /** * Creates a new stream for all items that are not strictly equal to undefined (item !== undefined). * @return A new stream that contains all items from the original stream that are not equal to undefined. @@ -480,12 +493,13 @@ package com.kemsky * @param initial The initial value for the accumulator. * @return The value of accumulator. */ - public function foldLeft(callback:Function, initial:*):* + public function foldLeft(callback:Function, initial:* = undefined):* { - var context:* = initial; - for each (var item:* in source) + var context:* = initial === undefined ? first : initial; + var start:int = initial === undefined ? 0 : 1; + for (var i:int = start; i < source.length; i++) { - context = callback(item, context); + context = callback(source[i], context); } return context; } @@ -496,12 +510,13 @@ package com.kemsky * @param initial The initial value for the accumulator. * @return The value of accumulator. */ - public function foldRight(callback:Function, initial:*):* + public function foldRight(callback:Function, initial:* = undefined):* { - var context:* = initial; - for each (var item:* in source.reverse()) + var context:* = initial === undefined ? last : initial; + var start:int = initial === undefined ? source.length - 2 : source.length - 1; + for (var i:int = start; i > 0; i--) { - context = callback(item, context); + context = callback(source[i], context); } return context; } diff --git a/testSrc/com/kemsky/TestStream.as b/testSrc/com/kemsky/TestStream.as index c7959ff..6d46974 100644 --- a/testSrc/com/kemsky/TestStream.as +++ b/testSrc/com/kemsky/TestStream.as @@ -727,6 +727,13 @@ package com.kemsky }, 10); assertEquals(sum2, 20); + + var sum3:Number = $(0, 1, 2, 3, 4).foldLeft(function (prev:Number, current:Number):Number + { + return prev + current; + }); + + assertEquals(sum3, 10); } [Test] @@ -745,6 +752,13 @@ package com.kemsky }, 10); assertEquals(sum2, 20); + + var sum3:Number = $(0, 1, 2, 3, 4).foldRight(function (prev:Number, current:Number):Number + { + return prev + current; + }); + + assertEquals(sum3, 10); } [Test]