diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-09 13:19:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-09 13:19:22 +0000 |
commit | c21c3b0befeb46a51b6bf3758ffa30813bea0ff0 (patch) | |
tree | 9754ff1ca740f6346cf8483ec915d4054bc5da2d /web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx | |
parent | Adding upstream version 1.43.2. (diff) | |
download | netdata-upstream/1.44.3.tar.xz netdata-upstream/1.44.3.zip |
Adding upstream version 1.44.3.upstream/1.44.3
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx')
-rw-r--r-- | web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx b/web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx new file mode 100644 index 000000000..4bdd72fe6 --- /dev/null +++ b/web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx @@ -0,0 +1,73 @@ +import "sais.jsx"; + +class BurrowsWheelerTransform +{ + static var END_MARKER = String.fromCharCode(0); + + var _str : string; + var _size : int; + var _head : int; + var _suffixarray : int[]; + + function constructor () + { + this._size = 0; + this._head = 0; + this._suffixarray = [] : int[]; + } + + function size () : int + { + return this._size; + } + + function head () : int + { + return this._head; + } + + function clear () : void + { + this._str = ""; + this._size = 0; + this._head = 0; + this._suffixarray.length = 0; + } + + function build (str : string) : void + { + this._str = str; + this._size = this._str.length; + this._suffixarray = SAIS.make(str); + this._head = this._suffixarray.indexOf(0); + } + + function get (i : int) : string + { + var size = this.size(); + if (i >= size) + { + throw new Error("BurrowsWheelerTransform.get() : range error"); + } + var index = (this._suffixarray[i] + size - 1) % size; + return this._str.charAt(index); + } + + function get () : string + { + var str = [] : string []; + var size = this.size(); + for (var i = 0; i < size; i++) + { + str.push(this.get(i)); + } + return str.join(""); + } + + function get (replace : string) : string + { + var result = this.get(); + return result.replace(BurrowsWheelerTransform.END_MARKER, replace); + } +} + |