From ba60aac6f6a1085b05eb2099d8d7b6303b285297 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Mon, 11 Mar 2024 22:09:01 -0400 Subject: [PATCH] r1191: fixed wrong reverse() and revcomp() due to k8 incompatibility. Resolves #1161 --- misc/paftools.js | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/misc/paftools.js b/misc/paftools.js index fa1ef804..89152ae9 100755 --- a/misc/paftools.js +++ b/misc/paftools.js @@ -1,6 +1,6 @@ #!/usr/bin/env k8 -var paftools_version = '2.26-r1189-dirty'; +var paftools_version = '2.26-r1191-dirty'; /***************************** ***** Library functions ***** @@ -193,10 +193,19 @@ function fasta_free(fa) Bytes.prototype.reverse = function() { - for (var i = 0; i < this.length>>1; ++i) { - var tmp = this[i]; - this[i] = this[this.length - i - 1]; - this[this.length - i - 1] = tmp; + if (typeof k8_version === "undefined") { // k8-0.x + for (var i = 0; i < this.length>>1; ++i) { + var tmp = this[i]; + this[i] = this[this.length - i - 1]; + this[this.length - i - 1] = tmp; + } + } else { // k8-1.x + var buf = new Uint8Array(this.buffer); + for (var i = 0; i < buf.length>>1; ++i) { + var tmp = buf[i]; + buf[i] = buf[buf.length - i - 1]; + buf[buf.length - i - 1] = tmp; + } } } @@ -211,13 +220,24 @@ Bytes.prototype.revcomp = function() for (var i = 0; i < s1.length; ++i) Bytes.rctab[s1.charCodeAt(i)] = s2.charCodeAt(i); } - for (var i = 0; i < this.length>>1; ++i) { - var tmp = this[this.length - i - 1]; - this[this.length - i - 1] = Bytes.rctab[this[i]]; - this[i] = Bytes.rctab[tmp]; + if (typeof k8_version === "undefined") { // k8-0.x + for (var i = 0; i < this.length>>1; ++i) { + var tmp = this[this.length - i - 1]; + this[this.length - i - 1] = Bytes.rctab[this[i]]; + this[i] = Bytes.rctab[tmp]; + } + if (this.length&1) + this[this.length>>1] = Bytes.rctab[this[this.length>>1]]; + } else { // k8-1.x + var buf = new Uint8Array(this.buffer); + for (var i = 0; i < buf.length>>1; ++i) { + var tmp = buf[buf.length - i - 1]; + buf[buf.length - i - 1] = Bytes.rctab[buf[i]]; + buf[i] = Bytes.rctab[tmp]; + } + if (buf.length&1) + buf[buf.length>>1] = Bytes.rctab[buf[buf.length>>1]]; } - if (this.length&1) - this[this.length>>1] = Bytes.rctab[this[this.length>>1]]; } /********************