diff --git a/www/lib.js b/www/lib.js index ebf888a..9ad619c 100644 --- a/www/lib.js +++ b/www/lib.js @@ -1,6 +1,8 @@ function Lib(ws) { return { clearElement: clearElement, + defaultCompare: defaultCompare, + funMap: funMap, insert: insert, send: send }; @@ -11,14 +13,36 @@ function Lib(ws) { } } - function insert(obj, t, min, max) { + function insert(obj, t, compare, min, max) { min = min == undefined ? 0 : min; max = max == undefined ? t.length : max; + compare = compare == undefined ? defaultCompare : compare; if(max - min < 1) { return min; } var avg = Math.floor((max + min) / 2); - return (obj < t[avg]) ? insert(obj, t, min, avg) : insert(obj, t, avg+1, max); + if (compare(obj, t[avg]) < 0) { + return insert(obj, t, compare, min, avg); + } else { + return insert(obj, t, compare, avg+1, max); + } + } + + function defaultCompare(a, b) { + if(a < b) { + return -1; + } else if(a > b) { + return 1; + } else { + return 0; + } + } + + function funMap(projector, f) { + return function() { + var args = Array.prototype.map.call(arguments, projector); + return f.apply(null, args); + } } function send(o) {