From 4f602cee6094add6e24f49963fdabc01641e9f58 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Wed, 29 Jun 2011 23:18:47 +0100 Subject: [PATCH] Use the new Buffers.find() function to speed up Binary.stream().scan(). --- index.js | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/index.js b/index.js index 1641f89..b590cc9 100644 --- a/index.js +++ b/index.js @@ -156,35 +156,29 @@ exports.stream = function (em, eventName) { var taken = 0; pending = function () { - var buf = buffers.slice(offset + taken); - // simple but slow string search - for (var i = 0; i <= buf.length - search.length; i++) { - for ( - var j = 0; - j < search.length && buf[i+j] === search[j]; - j++ - ); - if (j === search.length) { - pending = null; - if (offset != null) { - vars.set( - name, - buffers.slice(offset, offset + taken + i) - ); - offset += taken + i + j; - } - else { - vars.set( - name, - buffers.slice(0, taken + i) - ); - buffers.splice(0, taken + i + j); - } - next(); - dispatch(); - break; + var pos = buffers.find(search, offset + taken); + var i = pos-offset-taken; + if (pos !== -1) { + pending = null; + if (offset != null) { + vars.set( + name, + buffers.slice(offset, offset + taken + i) + ); + offset += taken + i + search.length; } - } + else { + vars.set( + name, + buffers.slice(0, taken + i) + ); + buffers.splice(0, taken + i + search.length); + } + next(); + dispatch(); + } else { + i = Math.max(buffers.length - search.length - offset - taken, 0); + } taken += i; }; dispatch();