[Pkg-javascript-commits] [node-stream-splicer] 16/71: better splice
Bastien Roucariès
rouca at moszumanska.debian.org
Fri Dec 15 09:55:48 UTC 2017
This is an automated email from the git hooks/post-receive script.
rouca pushed a commit to branch master
in repository node-stream-splicer.
commit 775470fc0f503b379397aca688b45c620586b9e6
Author: James Halliday <mail at substack.net>
Date: Sun Jun 8 13:09:10 2014 -0700
better splice
---
index.js | 73 +++++++++++++++++++++++++---------------------------------------
1 file changed, 28 insertions(+), 45 deletions(-)
diff --git a/index.js b/index.js
index 15feaf5..2b65a94 100644
--- a/index.js
+++ b/index.js
@@ -72,32 +72,10 @@ Pipeline.prototype._write = function (buf, enc, next) {
};
Pipeline.prototype.push = function (stream) {
- this._push(stream);
- this.emit('_mutate');
+ this.splice(this._streams.length, 0, stream);
return this._streams.length;
};
-Pipeline.prototype._push = function (stream) {
- var self = this;
- stream.on('error', function (err) {
- err.stream = this;
- self.emit('error', err);
- });
- stream = this._wrapStream(stream);
-
- if (this._streams.length > 0) {
- this._streams[this._streams.length-1].pipe(stream);
- }
- this._streams.push(stream);
-
- stream.once('end', function () {
- var ix = self._streams.indexOf(stream);
- if (ix === self._streams.length - 1) {
- Duplex.prototype.push.call(self, null);
- }
- });
-};
-
Pipeline.prototype.pop = function () {
var s = this._streams.pop();
if (this._streams.length > 0) {
@@ -109,42 +87,47 @@ Pipeline.prototype.pop = function () {
Pipeline.prototype.splice = function (start, removeLen) {
var self = this;
- var removed = this._streams.splice.apply(this._streams, arguments);
- var n = start < 0 ? this._streams.length - start : start;
+ var len = this._streams.length;
+ start = start < 0 ? len - start : start;
+ if (removeLen === undefined) removeLen = len - start;
+ removeLen = Math.max(0, Math.min(len - start, removeLen));
- if (this._streams[n-1] && removed.length > 0) {
- this._streams[n-1].unpipe(removed[0]);
- }
- for (var i = 1; i < removed.length; i++) {
- removed[i-1].unpipe(removed[i]);
+ for (var i = start; i < start + removeLen; i++) {
+ if (self._streams[i-1]) {
+ self._streams[i-1].unpipe(self._streams[i]);
+ }
}
- var nextIndex = n + 1 - removeLen + arguments.length - 2;
- if (removed[i-1] && this._streams[nextIndex]) {
- removed[i-1].unpipe(this._streams[nextIndex]);
+ if (self._streams[i-1] && self._streams[i]) {
+ self._streams[i-1].unpipe(self._streams[i]);
}
- for (var i = 2; i < arguments.length; i++) (function (stream, i) {
- var j = n + 1 - removeLen + i - 2;
+ var end = i;
+
+ var reps = [], args = arguments;
+ for (var j = 2; j < args.length; j++) (function (stream) {
stream.on('error', function (err) {
err.stream = this;
self.emit('error', err);
});
- stream = self._streams[j] = self._wrapStream(stream);
-
- if (self._streams[j-1]) {
- self._streams[j-1].pipe(stream);
- }
-
+ stream = self._wrapStream(stream);
stream.once('end', function () {
var ix = self._streams.indexOf(stream);
- if (ix === self._streams.length - 1) {
+ if (ix >= 0 && ix === self._streams.length - 1) {
Duplex.prototype.push.call(self, null);
}
});
- })(arguments[i], i);
+ if (j < args.length - 1) stream.pipe(args[j+1]);
+ reps.push(stream);
+ })(arguments[j]);
- if (self._streams[nextIndex-1] && self._streams[nextIndex]) {
- self._streams[nextIndex-1].pipe(self._streams[nextIndex]);
+ if (reps.length && self._streams[end]) {
+ reps[reps.length-1].pipe(self._streams[end]);
}
+ if (self._streams[start-1]) {
+ self._streams[start-1].pipe(reps[0]);
+ }
+
+ var sargs = [start,removeLen].concat(reps);
+ var removed = self._streams.splice.apply(self._streams, sargs);
this.emit('_mutate');
return removed;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-stream-splicer.git
More information about the Pkg-javascript-commits
mailing list