From ecb6a7cef0d2ad857fa6b2a6981715dd0e1e2ce4 Mon Sep 17 00:00:00 2001 From: Micheil Smith Date: Wed, 21 Jul 2010 07:27:03 +1000 Subject: [PATCH] Implemented Manager.map & Manager.filter; Changes to Manager.forEach --- lib/ws/manager.js | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/lib/ws/manager.js b/lib/ws/manager.js index 28c6c1d..b564508 100644 --- a/lib/ws/manager.js +++ b/lib/ws/manager.js @@ -86,11 +86,44 @@ Manager.prototype.find = function(id, callback){ } }; -Manager.prototype.forEach = function(callback){ +Manager.prototype.forEach = function(callback, thisArg){ var current = this._head; while(current !== null){ - callback(current.client); + callback.call(thisArg, current.client); current = current._next; } +}; + +Manager.prototype.map = function(callback, thisArg){ + var current = this._head + , len = 0 + , result = new Array(this._length); + , mappedValue; + + while(current !== null){ + result[len] = callback.call(thisArg, current.client, len, this._head); + current = current._next; + ++len; + } + + return result; +}; + +Manager.prototype.filter = function(callback, thisArg){ + var current = this._head + , len = 0 + , result = new Array(this._length); + , mappedValue; + + while(current !== null){ + if( Boolean(callback.call(thisArg, current.client, len, this._head)) ){ + result[len] = current.client; + ++len; + } + + current = current._next; + } + + return result; }; \ No newline at end of file