summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/misc/oktavia/src/burrows-wheeler-transform.jsx73
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 00000000..4bdd72fe
--- /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);
+ }
+}
+