From 4f805ce52a9a6e1cd7d14fa6442cfa6252c32334 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 18 Mar 2016 20:12:17 -0700 Subject: [PATCH] lru. buffer reader zeroCopy. utils.wrap. --- lib/bcoin/datastore.js | 8 -------- lib/bcoin/lru.js | 10 ++++++++++ lib/bcoin/reader.js | 17 +++++++++++++---- lib/bcoin/utils.js | 8 ++++++++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lib/bcoin/datastore.js b/lib/bcoin/datastore.js index 760afaad..005f8ed7 100644 --- a/lib/bcoin/datastore.js +++ b/lib/bcoin/datastore.js @@ -376,14 +376,6 @@ Iterator.prototype.end = function end(callback) { return ret; }; -utils.wrap = function wrap(callback, unlock) { - return function(err, result) { - unlock(); - if (callback) - callback(err, result); - }; -}; - DataStore.prototype.putData = function putData(data, callback, force) { var self = this; var offset; diff --git a/lib/bcoin/lru.js b/lib/bcoin/lru.js index f219f63f..8d6fa50f 100644 --- a/lib/bcoin/lru.js +++ b/lib/bcoin/lru.js @@ -247,6 +247,16 @@ LRU.prototype.keys = function keys() { return keys; }; +LRU.prototype.items = function items() { + var items = []; + var item; + + for (item = this.head; item; item = item.next) + items.push(item); + + return items; +}; + LRU.prototype.iterator = function iterator() { return { item: { next: this.head }, diff --git a/lib/bcoin/reader.js b/lib/bcoin/reader.js index e74d32a3..6be309a8 100644 --- a/lib/bcoin/reader.js +++ b/lib/bcoin/reader.js @@ -11,11 +11,12 @@ var assert = utils.assert; * BufferReader */ -function BufferReader(data, offset) { +function BufferReader(data, zeroCopy) { if (data instanceof BufferReader) return data; this.data = data; - this.offset = offset || 0; + this.offset = 0; + this.zeroCopy = zeroCopy; this.stack = []; } @@ -157,10 +158,18 @@ BufferReader.prototype.read64BE = function read64BE() { }; BufferReader.prototype.readBytes = function readBytes(size) { + var ret; + assert(size >= 0); assert(this.offset + size <= this.data.length); - var ret = utils.slice(this.data, this.offset, this.offset + size); + + if (this.zeroCopy) + ret = this.data.slice(this.offset, this.offset + size); + else + ret = utils.slice(this.data, this.offset, this.offset + size); + this.offset += size; + return ret; }; @@ -174,7 +183,7 @@ BufferReader.prototype.readString = function readString(enc, size) { BufferReader.prototype.readHash = function readHash(enc) { if (enc) - return this.readBytes(32).toString(enc); + return this.readString(enc, 32); return this.readBytes(32); }; diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 57e7d040..d892edbf 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -1745,6 +1745,14 @@ utils.pad32 = function pad32(num) { return num; }; +utils.wrap = function wrap(callback, unlock) { + return function(err, result) { + unlock(); + if (callback) + callback(err, result); + }; +}; + function SyncBatch(db) { this.db = db; this.ops = [];