Script: add fromChunks and without

This commit is contained in:
Daniel Cousens 2014-05-28 19:36:33 +10:00
parent d18f2dba00
commit 7d94d1b068
2 changed files with 79 additions and 0 deletions

View file

@ -1,4 +1,5 @@
var assert = require('assert')
var bufferutils = require('./bufferutils')
var crypto = require('./crypto')
var opcodes = require('./opcodes')
@ -367,4 +368,50 @@ Script.prototype.clone = function() {
return new Script(this.buffer)
}
Script.fromChunks = function(chunks) {
assert(Array.isArray(chunks), 'Expected Array, got: ' + chunks)
var bufferSize = chunks.reduce(function(accum, chunk) {
var chunkSize = 1
// FIXME: transitionary
if (Array.isArray(chunk) || Buffer.isBuffer(chunk)) {
chunkSize = bufferutils.pushDataSize(chunk.length) + chunk.length
}
return accum + chunkSize
}, 0.0)
var buffer = new Buffer(bufferSize)
var offset = 0
chunks.forEach(function(chunk) {
// FIXME: transitionary
if (Array.isArray(chunk) || Buffer.isBuffer(chunk)) {
offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
// FIXME: transitionary
// chunk.copy(buffer, offset)
for (var i = 0; i < chunk.length; ++i) {
buffer[offset + i] = chunk[i]
}
offset += chunk.length
} else {
buffer.writeUInt8(chunk, offset)
offset += 1
}
})
return Script.fromBuffer(buffer)
}
// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
Script.prototype.without = function(needle) {
return Script.fromChunks(this.chunks.filter(function(op) {
return op !== needle
}))
}
module.exports = Script