Skip to content

Commit

Permalink
adaptive function arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
kemsky committed Feb 15, 2016
1 parent 4c22053 commit bf16391
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 7 deletions.
70 changes: 64 additions & 6 deletions source/com/kemsky/Stream.as
Original file line number Diff line number Diff line change
Expand Up @@ -1960,10 +1960,39 @@ package com.kemsky
*/
public function forEach(callback:Function):Stream
{
source.forEach(function (item:*, index:int, array:Array):void
var count:uint = callback.length;
var f:Function;
switch(count)
{
callback(item);
});
case 0:
f = function (item:*, index:int, array:Array):void
{
callback();
};
break;
case 1:
f = function (item:*, index:int, array:Array):void
{
callback(item);
};
break;
case 2:
f = function (item:*, index:int, array:Array):void
{
callback(item, index);
};
break;
case 3:
var that:Stream = this;
f = function (item:*, index:int, array:Array):void
{
callback(item, index, that);
};
break;
default:
throw new StreamError("Unexpected arguments count: " + count);
}
source.forEach(f);
return this;
}

Expand All @@ -1988,10 +2017,39 @@ package com.kemsky
*/
public function map(callback:Function):Stream
{
return new Stream(source.map(function (item:*, index:int, array:Array):*
var count:uint = callback.length;
var f:Function;
switch(count)
{
return callback(item);
}));
case 0:
f = function (item:*, index:int, array:Array):*
{
return callback();
};
break;
case 1:
f = function (item:*, index:int, array:Array):*
{
return callback(item);
};
break;
case 2:
f = function (item:*, index:int, array:Array):*
{
return callback(item, index);
};
break;
case 3:
var that:Stream = this;
f = function (item:*, index:int, array:Array):*
{
return callback(item, index, that);
};
break;
default:
throw new StreamError("Unexpected arguments count: " + count);
}
return new Stream(source.map(f));
}

/**
Expand Down
32 changes: 32 additions & 0 deletions testSrc/com/kemsky/TestArrayApi.as
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,40 @@ package com.kemsky
{
counter++;
});
assertEquals(counter, 4);

counter = 0;
s.forEach(function (item:Number, index:uint):void
{
counter++;
});
assertEquals(counter, 4);

counter = 0;
s.forEach(function (item:Number, index:uint, stream:Stream):void
{
counter++;
});
assertEquals(counter, 4);

counter = 0;
s.forEach(function ():void
{
counter++;
});
assertEquals(counter, 4);

try
{
s.forEach(function (item:Number, index:uint, stream:Stream, bla:int):void
{
counter++;
});
assertFalse(true);
}
catch(e:Error)
{
}
}

[Test]
Expand Down
32 changes: 31 additions & 1 deletion testSrc/com/kemsky/TestStream.as
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,37 @@ package com.kemsky
{
var item:Item = new Item("name1", 5, 0);
var s:Stream = $(item);
assertEquals(s.map(member("name")).first, "name1");
assertEquals(s.map(function(item:Item):String
{
return item.name;
}).first, "name1");

assertEquals(s.map(function(item:Item, index:uint):String
{
return item.name;
}).first, "name1");

assertEquals(s.map(function(item:Item, index:uint, stream:Stream):String
{
return item.name;
}).first, "name1");

assertEquals(s.map(function():String
{
return "name1";
}).first, "name1");

try
{
s.map(function(item:Item, index:uint, stream:Stream, bla:int):String
{
return item.name;
});
assertFalse(true);
}
catch(e:Error)
{
}
}

[Test]
Expand Down

0 comments on commit bf16391

Please sign in to comment.