diff --git a/100_core/src/gplx/core/brys/Bry_bfr_mkr.java b/100_core/src/gplx/core/brys/Bry_bfr_mkr.java
index da5fe6d23..0239140a6 100644
--- a/100_core/src/gplx/core/brys/Bry_bfr_mkr.java
+++ b/100_core/src/gplx/core/brys/Bry_bfr_mkr.java
@@ -16,13 +16,11 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.core.brys; import gplx.*; import gplx.core.*;
-public class Bry_bfr_mkr {
- private final Bry_bfr_mkr_mgr mkr_b128 = new Bry_bfr_mkr_mgr(Tid_b128, 128);
- public Bry_bfr Get_b128() {return mkr_b128.Get();}
- public Bry_bfr Get_b512() {return mkr_b512.Get();} private final Bry_bfr_mkr_mgr mkr_b512 = new Bry_bfr_mkr_mgr(Tid_b512, 512);
- public Bry_bfr Get_k004() {return mkr_k004.Get();} private final Bry_bfr_mkr_mgr mkr_k004 = new Bry_bfr_mkr_mgr(Tid_k004, 4 * Io_mgr.Len_kb);
- public Bry_bfr Get_m001() {return mkr_m001.Get();} private final Bry_bfr_mkr_mgr mkr_m001 = new Bry_bfr_mkr_mgr(Tid_m001, 1 * Io_mgr.Len_mb);
- public void Rls(Bry_bfr v) {v.Mkr_rls();}
+public class Bry_bfr_mkr {
+ public Bry_bfr Get_b128() {return mkr_b128.Get();} private final Bry_bfr_mkr_mgr mkr_b128 = new Bry_bfr_mkr_mgr(Tid_b128, 128);
+ public Bry_bfr Get_b512() {return mkr_b512.Get();} private final Bry_bfr_mkr_mgr mkr_b512 = new Bry_bfr_mkr_mgr(Tid_b512, 512);
+ public Bry_bfr Get_k004() {return mkr_k004.Get();} private final Bry_bfr_mkr_mgr mkr_k004 = new Bry_bfr_mkr_mgr(Tid_k004, 4 * Io_mgr.Len_kb);
+ public Bry_bfr Get_m001() {return mkr_m001.Get();} private final Bry_bfr_mkr_mgr mkr_m001 = new Bry_bfr_mkr_mgr(Tid_m001, 1 * Io_mgr.Len_mb);
public void Clear() {
for (byte i = Tid_b128; i <= Tid_m001; i++)
mkr(i).Clear();
diff --git a/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java b/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java
index 49a09977d..556b3b25c 100644
--- a/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java
+++ b/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java
@@ -18,15 +18,15 @@ along with this program. If not, see .
package gplx.core.brys; import gplx.*; import gplx.core.*;
public class Bry_bfr_mkr_mgr {
private final Object thread_lock = new Object();
+ private final byte mgr_id; private final int reset;
private Bry_bfr[] used = Bry_bfr_.Ary_empty; private int used_len = 0, used_max = 0;
- private int[] free; private int free_len; private int reset;
+ private int[] free; private int free_len;
public Bry_bfr_mkr_mgr(byte mgr_id, int reset) {// NOTE: random IndexOutOfBounds errors in Get around free[--free_len] with free_len being -1; put member variable initialization within thread_lock to try to avoid; DATE:2014-09-21
this.mgr_id = mgr_id;
this.reset = reset;
this.free = Int_.Ary_empty;
this.free_len = 0;
}
- public byte Mgr_id() {return mgr_id;} private byte mgr_id;
public Bry_bfr Get() {
synchronized (thread_lock) {
Bry_bfr rv = null; int rv_idx = -1;
@@ -62,7 +62,7 @@ public class Bry_bfr_mkr_mgr {
for (int i = 0; i < used_max; i++) {
Bry_bfr itm = used[i];
if (itm != null) {
- if (!itm.Mkr_idx_is_null()) throw Err_.new_wo_type("failed to clear bfr", "idx", Int_.To_str(i));
+ if (!itm.Mkr_idx_is_null()) throw Err_.new_wo_type("failed to clear bfr", "mgr_id", mgr_id, "idx", Int_.To_str(i));
itm.Clear();
}
used[i] = null;
diff --git a/100_core/src/gplx/core/brys/Bry_rdr.java b/100_core/src/gplx/core/brys/Bry_rdr.java
index 72a768d64..1a9a7b23c 100644
--- a/100_core/src/gplx/core/brys/Bry_rdr.java
+++ b/100_core/src/gplx/core/brys/Bry_rdr.java
@@ -19,6 +19,7 @@ package gplx.core.brys; import gplx.*; import gplx.core.*;
import gplx.core.errs.*; import gplx.core.btries.*;
public class Bry_rdr {
private final gplx.core.primitives.Int_obj_ref pos_ref = gplx.core.primitives.Int_obj_ref.New_neg1();
+ private final Btrie_rv trv = new Btrie_rv();
public byte[] Src() {return src;} protected byte[] src;
public int Src_end() {return src_end;} protected int src_end;
public int Pos() {return pos;} protected int pos;
@@ -150,8 +151,8 @@ public class Bry_rdr {
byte rv = Chk_or(trie, Byte_.Max_value_127);
if (rv == Byte_.Max_value_127) err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16)));
}
- public Object Chk_trie_as_obj(Btrie_slim_mgr trie) {
- Object rv = trie.Match_bgn(src, pos, src_end); if (rv == null) err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16)));
+ public Object Chk_trie_as_obj(Btrie_rv trv, Btrie_slim_mgr trie) {
+ Object rv = trie.Match_at(trv, src, pos, src_end); if (rv == null) err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16)));
return rv;
}
public byte Chk_or(Btrie_slim_mgr trie, byte or) {return Chk_or(trie, pos, src_end, or);}
@@ -161,9 +162,9 @@ public class Bry_rdr {
return rv;
}
public byte Chk_or(Btrie_slim_mgr trie, int itm_bgn, int itm_end, byte or) {
- Object rv_obj = trie.Match_bgn(src, itm_bgn, itm_end);
+ Object rv_obj = trie.Match_at(trv, src, itm_bgn, itm_end);
if (rv_obj == null) return or;
- pos = trie.Match_pos();
+ pos = trv.Pos();
return ((gplx.core.primitives.Byte_obj_val)rv_obj).Val();
}
@gplx.Virtual public Bry_rdr Skip_ws() {
diff --git a/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java b/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java
index 8fa6f491f..2abe2d271 100644
--- a/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java
+++ b/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java
@@ -23,6 +23,37 @@ public class Btrie_bwd_mgr {
Object rv = Match(src[bgn_pos], src, bgn_pos, end_pos);
return rv == null ? null : match_pos - bgn_pos == end_pos - bgn_pos ? rv : null;
}
+
+ public Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos) {return Match_at_w_b0(rv, src[bgn_pos], src, bgn_pos, end_pos);}
+ public Object Match_at_w_b0(Btrie_rv rv, byte b, byte[] src, int bgn_pos, int end_pos) {
+ // NOTE: bgn, end follows same semantics as fwd where bgn >= & end < except reversed: bgn <= & end >; EX: "abcde" should pass 5, -1
+ Object rv_obj = null;
+ int rv_pos = bgn_pos;
+ int cur_pos = bgn_pos;
+ Btrie_slim_itm cur = root;
+ while (true) {
+ Btrie_slim_itm nxt = cur.Ary_find(b);
+ if (nxt == null) { // nxt does not have b; return rv_obj;
+ rv.Init(rv_pos, rv_obj);
+ return rv_obj;
+ }
+ --cur_pos;
+ if (nxt.Ary_is_empty()) { // nxt is leaf; return nxt.Val() (which should be non-null)
+ rv_obj = nxt.Val();
+ rv.Init(cur_pos, rv_obj);
+ return rv_obj;
+ }
+ Object nxt_val = nxt.Val();
+ if (nxt_val != null) {rv_pos = cur_pos; rv_obj = nxt_val;} // nxt is node; cache rv_obj (in case of false match)
+ if (cur_pos == end_pos) { // increment cur_pos and exit if end_pos
+ rv.Init(rv_pos, rv_obj);
+ return rv_obj;
+ }
+ b = src[cur_pos];
+ cur = nxt;
+ }
+ }
+
public Object Match_bgn(byte[] src, int bgn_pos, int end_pos) {return Match(src[bgn_pos], src, bgn_pos, end_pos);}
public Object Match(byte b, byte[] src, int bgn_pos, int end_pos) {
// NOTE: bgn, end follows same semantics as fwd where bgn >= & end < except reversed: bgn <= & end >; EX: "abcde" should pass 5, -1
diff --git a/100_core/src/gplx/core/btries/Btrie_fast_mgr.java b/100_core/src/gplx/core/btries/Btrie_fast_mgr.java
index 649916bea..9dd0da5da 100644
--- a/100_core/src/gplx/core/btries/Btrie_fast_mgr.java
+++ b/100_core/src/gplx/core/btries/Btrie_fast_mgr.java
@@ -22,12 +22,7 @@ public class Btrie_fast_mgr {
public boolean CaseAny() {return root.CaseAny();} public Btrie_fast_mgr CaseAny_(boolean v) {root.CaseAny_(v); return this;}
public int Match_pos() {return match_pos;} private int match_pos;
-// Btrie_rv Match_at_w_b0_and_rls(byte[] src, int bgn, int end) {return Match_at_w_b0_and_rls(src[bgn], src, bgn, end);}
-// Btrie_rv Match_at_w_b0_and_rls(byte b, byte[] src, int bgn_pos, int src_end) {
-// Btrie_rv rv = ((Btrie_rv)Btrie_rv.Pool__mgr.Get_safe());
-// Match_at_w_b0(rv, b, src, bgn_pos, src_end);
-// return rv;
-// }
+ public Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos) {return Match_at_w_b0(rv, src[bgn_pos], src, bgn_pos, end_pos);}
public Object Match_at_w_b0(Btrie_rv rv, byte b, byte[] src, int bgn_pos, int src_end) {
Object rv_obj = null;
int rv_pos = bgn_pos;
diff --git a/100_core/src/gplx/core/btries/Btrie_mgr.java b/100_core/src/gplx/core/btries/Btrie_mgr.java
index 2fe6c6bf0..f05d435ed 100644
--- a/100_core/src/gplx/core/btries/Btrie_mgr.java
+++ b/100_core/src/gplx/core/btries/Btrie_mgr.java
@@ -18,6 +18,7 @@ along with this program. If not, see .
package gplx.core.btries; import gplx.*; import gplx.core.*;
public interface Btrie_mgr {
int Match_pos();
+ Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos);
Object Match_bgn(byte[] src, int bgn_pos, int end_pos);
Btrie_mgr Add_obj(String key, Object val);
Btrie_mgr Add_obj(byte[] key, Object val);
diff --git a/100_core/src/gplx/core/btries/Btrie_slim_mgr.java b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java
index 86e9ed450..a6be5ecc0 100644
--- a/100_core/src/gplx/core/btries/Btrie_slim_mgr.java
+++ b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java
@@ -31,7 +31,7 @@ public class Btrie_slim_mgr implements Btrie_mgr {
while (true) {
Btrie_slim_itm nxt = cur.Ary_find(b);
if (nxt == null) {
- rv.Init(cur_pos, rv_obj); // nxt does not hav b; return rv_obj;
+ rv.Init(rv_pos, rv_obj); // nxt does not have b; return rv_obj;
return rv_obj;
}
++cur_pos;
@@ -79,6 +79,14 @@ public class Btrie_slim_mgr implements Btrie_mgr {
Object rv_obj = Match_bgn(src, bgn, end);
return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val();
}
+ public byte Match_byte_or(Btrie_rv trv, byte b, byte[] src, int bgn, int end, byte or) {
+ Object rv_obj = Match_at_w_b0(trv, b, src, bgn, end);
+ return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val();
+ }
+ public byte Match_byte_or(Btrie_rv trv, byte[] src, int bgn, int end, byte or) {
+ Object rv_obj = Match_at(trv, src, bgn, end);
+ return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val();
+ }
public Btrie_slim_mgr Add_bry_tid(byte[] bry, byte tid) {return (Btrie_slim_mgr)Add_obj(bry, Byte_obj_val.new_(tid));}
public Btrie_slim_mgr Add_bry_int(byte[] key, int val) {return (Btrie_slim_mgr)Add_obj(key, Int_obj_val.new_(val));}
public Btrie_slim_mgr Add_str_byte(String key, byte val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_u8(key), Byte_obj_val.new_(val));}
diff --git a/100_core/src/gplx/core/btries/Btrie_u8_mgr.java b/100_core/src/gplx/core/btries/Btrie_u8_mgr.java
index 3934876fd..7a7d6243c 100644
--- a/100_core/src/gplx/core/btries/Btrie_u8_mgr.java
+++ b/100_core/src/gplx/core/btries/Btrie_u8_mgr.java
@@ -24,6 +24,37 @@ public class Btrie_u8_mgr implements Btrie_mgr {
this.root = new Btrie_u8_itm(Bry_.Empty, null);
}
public int Count() {return count;} private int count;
+ public Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos) {return Match_at_w_b0(rv, src[bgn_pos], src, bgn_pos, end_pos);}
+ public Object Match_at_w_b0(Btrie_rv rv, byte b, byte[] src, int bgn_pos, int end_pos) {
+ Object rv_obj = null;
+ int rv_pos = bgn_pos;
+ int cur_pos = bgn_pos;
+ Btrie_u8_itm cur = root;
+ while (true) {
+ int c_len = Utf8_.Len_of_char_by_1st_byte(b);
+ int c_end = cur_pos + c_len;
+ Btrie_u8_itm nxt = cur.Nxts_find(src, cur_pos, c_end, true);
+ if (nxt == null) {
+ rv.Init(rv_pos, rv_obj); // nxts does not have key; return rv_obj;
+ return rv_obj;
+ }
+ cur_pos = c_end;
+ if (nxt.Nxts_is_empty()) { // nxt is leaf; return nxt.Val() (which should be non-null)
+ rv_obj = nxt.Val();
+ rv.Init(cur_pos, rv_obj);
+ return rv_obj;
+ }
+ Object nxt_val = nxt.Val();
+ if (nxt_val != null) {rv_pos = cur_pos; rv_obj = nxt_val;} // nxt is node; cache rv_obj (in case of false match)
+ if (cur_pos == end_pos) { // increment cur_pos and exit if end
+ rv.Init(rv_pos, rv_obj);
+ return rv_obj;
+ }
+ b = src[cur_pos];
+ cur = nxt;
+ }
+ }
+
public int Match_pos() {return match_pos;} private int match_pos;
public Object Match_bgn(byte[] src, int bgn_pos, int end_pos) {return Match_bgn_w_byte(src[bgn_pos], src, bgn_pos, end_pos);}
public Object Match_bgn_w_byte(byte b, byte[] src, int bgn_pos, int end_pos) {
diff --git a/100_core/src/gplx/core/threads/utils/Gfo_blocking_queue.java b/100_core/src/gplx/core/threads/utils/Gfo_blocking_queue.java
new file mode 100644
index 000000000..08d33be03
--- /dev/null
+++ b/100_core/src/gplx/core/threads/utils/Gfo_blocking_queue.java
@@ -0,0 +1,35 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.core.threads.utils; import gplx.*; import gplx.core.*; import gplx.core.threads.*;
+import java.util.concurrent.ArrayBlockingQueue;
+public class Gfo_blocking_queue {
+ private final ArrayBlockingQueue queue;
+ public Gfo_blocking_queue(int capacity) {
+ this.capacity = capacity;
+ this.queue = new ArrayBlockingQueue(capacity);
+ }
+ public int Capacity() {return capacity;} private final int capacity;
+ public void Put(Object o) {
+ try {queue.put(o);}
+ catch (InterruptedException e) {throw Err_.new_exc(e, "threads", "put interrupted");}
+ }
+ public Object Take() {
+ try {return queue.take();}
+ catch (InterruptedException e) {throw Err_.new_exc(e, "threads", "take interrupted");}
+ }
+}
diff --git a/100_core/src/gplx/core/threads/utils/Gfo_countdown_latch.java b/100_core/src/gplx/core/threads/utils/Gfo_countdown_latch.java
new file mode 100644
index 000000000..1845fa8ee
--- /dev/null
+++ b/100_core/src/gplx/core/threads/utils/Gfo_countdown_latch.java
@@ -0,0 +1,32 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.core.threads.utils; import gplx.*; import gplx.core.*; import gplx.core.threads.*;
+import java.util.concurrent.CountDownLatch;
+public class Gfo_countdown_latch {
+ private final CountDownLatch latch;
+ public Gfo_countdown_latch(int count) {
+ latch = new CountDownLatch(count);
+ }
+ public void Countdown() {
+ latch.countDown();
+ }
+ public void Await() {
+ try {latch.await();}
+ catch (InterruptedException e) {throw Err_.new_exc(e, "threads", "await interrupted");}
+ }
+}
diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java
index 08effb008..5714b79c6 100644
--- a/140_dbs/src/gplx/dbs/Db_conn.java
+++ b/140_dbs/src/gplx/dbs/Db_conn.java
@@ -39,6 +39,7 @@ public class Db_conn {
public void Env_vacuum() {Exec_sql_plog_ntx("vacuuming: url=" + this.Conn_info().Db_api(), "VACUUM;");}
public void Meta_tbl_create(Dbmeta_tbl_itm meta) {engine.Meta_tbl_create(meta); engine.Meta_idx_create(Gfo_usr_dlg_.Noop, meta.Idxs().To_ary());}
public void Meta_tbl_delete(String tbl) {engine.Meta_tbl_delete(tbl);}
+ public void Meta_tbl_remake(Db_tbl tbl) {engine.Meta_tbl_delete(tbl.Tbl_name()); tbl.Create_tbl();}
public void Meta_tbl_remake(Dbmeta_tbl_itm meta) {engine.Meta_tbl_delete(meta.Name()); engine.Meta_tbl_create(meta);}
public void Meta_idx_assert(String tbl, String suffix, String... flds) {if (engine.Meta_idx_exists(tbl + "__" + suffix)) return; this.Meta_idx_create(tbl, suffix, flds);}
public void Meta_idx_assert(String tbl, String suffix, Dbmeta_idx_fld... flds) {if (engine.Meta_idx_exists(tbl + "__" + suffix)) return; this.Meta_idx_create(tbl, suffix, flds);}
diff --git a/140_dbs/src/gplx/dbs/Db_conn_bldr.java b/140_dbs/src/gplx/dbs/Db_conn_bldr.java
index 095344b5d..1afd9c611 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_bldr.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_bldr.java
@@ -17,26 +17,33 @@ along with this program. If not, see .
*/
package gplx.dbs; import gplx.*;
public class Db_conn_bldr {
+ private final Object thread_lock = new Object(); // LOCK:synchronized else random failures in Schema_mgr due to diff conn pointing to same db; DATE:2016-07-12
private Db_conn_bldr_wkr wkr;
public void Reg_default_sqlite() {wkr = Db_conn_bldr_wkr__sqlite.Instance; wkr.Clear_for_tests();}
public void Reg_default_mem() {wkr = Db_conn_bldr_wkr__mem.Instance; wkr.Clear_for_tests();}
- public boolean Exists(Io_url url) {return wkr.Exists(url);}
- public Db_conn Get(Io_url url) {return wkr.Get(url);}
- public Db_conn New(Io_url url) {return wkr.New(url);}
+ public boolean Exists(Io_url url) {synchronized (thread_lock) {return wkr.Exists(url);}}
+ public Db_conn Get(Io_url url) {synchronized (thread_lock) {return wkr.Get(url);}}
+ public Db_conn New(Io_url url) {synchronized (thread_lock) {return wkr.New(url);}}
public Db_conn_bldr_data Get_or_new(Io_url url) {
- boolean exists = wkr.Exists(url);
- Db_conn conn = exists ? Get(url) : New(url);
- return new Db_conn_bldr_data(conn, exists);
+ synchronized (thread_lock) {
+ boolean exists = wkr.Exists(url);
+ Db_conn conn = exists ? Get(url) : New(url);
+ return new Db_conn_bldr_data(conn, exists);
+ }
}
public Db_conn Get_or_noop(Io_url url) {
- Db_conn rv = wkr.Get(url);
- return rv == null ? Db_conn_.Noop : rv;
+ synchronized (thread_lock) {
+ Db_conn rv = wkr.Get(url);
+ return rv == null ? Db_conn_.Noop : rv;
+ }
}
public Db_conn Get_or_autocreate(boolean autocreate, Io_url url) {
- boolean exists = wkr.Exists(url);
- if (exists) return Get(url);
- if (autocreate) return New(url);
- else throw Err_.new_("dbs", "db does not exist", "url", url.Raw());
+ synchronized (thread_lock) {
+ boolean exists = wkr.Exists(url);
+ if (exists) return Get(url);
+ if (autocreate) return New(url);
+ else throw Err_.new_("dbs", "db does not exist", "url", url.Raw());
+ }
}
public static final Db_conn_bldr Instance = new Db_conn_bldr(); Db_conn_bldr() {}
}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java
index 69142dabf..6c262503c 100644
--- a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java
@@ -19,7 +19,7 @@ package gplx.dbs.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.db
import gplx.core.brys.*; import gplx.core.btries.*;
abstract class Dbmeta_fld_wkr__base {
private byte[] hook;
- private final Btrie_slim_mgr words_trie = Btrie_slim_mgr.ci_a7();
+ private final Btrie_slim_mgr words_trie = Btrie_slim_mgr.ci_a7();
private int words_len;
@gplx.Virtual public int Tid() {return Tid_other;}
public void Ctor(byte[] hook, byte[]... words_ary) {
@@ -46,47 +46,47 @@ class Dbmeta_fld_wkr__end_comma extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__end_comma() {this.Ctor(Hook);}
@Override public int Tid() {return Tid_end_comma;}
@Override protected void When_match(Dbmeta_fld_itm fld) {}
- private static final byte[] Hook = Bry_.new_a7(",");
- public static final Dbmeta_fld_wkr__end_comma Instance = new Dbmeta_fld_wkr__end_comma();
+ private static final byte[] Hook = Bry_.new_a7(",");
+ public static final Dbmeta_fld_wkr__end_comma Instance = new Dbmeta_fld_wkr__end_comma();
}
class Dbmeta_fld_wkr__end_paren extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__end_paren() {this.Ctor(Hook);}
@Override public int Tid() {return Tid_end_paren;}
@Override protected void When_match(Dbmeta_fld_itm fld) {}
- private static final byte[] Hook = Bry_.new_a7(")");
- public static final Dbmeta_fld_wkr__end_paren Instance = new Dbmeta_fld_wkr__end_paren();
+ private static final byte[] Hook = Bry_.new_a7(")");
+ public static final Dbmeta_fld_wkr__end_paren Instance = new Dbmeta_fld_wkr__end_paren();
}
class Dbmeta_fld_wkr__nullable_null extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__nullable_null() {this.Ctor(Hook);}
@Override protected void When_match(Dbmeta_fld_itm fld) {
fld.Nullable_tid_(Dbmeta_fld_itm.Nullable_null);
}
- private static final byte[] Hook = Bry_.new_a7("null");
- public static final Dbmeta_fld_wkr__nullable_null Instance = new Dbmeta_fld_wkr__nullable_null();
+ private static final byte[] Hook = Bry_.new_a7("null");
+ public static final Dbmeta_fld_wkr__nullable_null Instance = new Dbmeta_fld_wkr__nullable_null();
}
class Dbmeta_fld_wkr__nullable_not extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__nullable_not() {this.Ctor(Hook, Bry_null);}
@Override protected void When_match(Dbmeta_fld_itm fld) {
fld.Nullable_tid_(Dbmeta_fld_itm.Nullable_not_null);
}
- private static final byte[] Hook = Bry_.new_a7("not"), Bry_null = Bry_.new_a7("null");
- public static final Dbmeta_fld_wkr__nullable_not Instance = new Dbmeta_fld_wkr__nullable_not();
+ private static final byte[] Hook = Bry_.new_a7("not"), Bry_null = Bry_.new_a7("null");
+ public static final Dbmeta_fld_wkr__nullable_not Instance = new Dbmeta_fld_wkr__nullable_not();
}
class Dbmeta_fld_wkr__primary_key extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__primary_key() {this.Ctor(Hook, Bry_key);}
@Override protected void When_match(Dbmeta_fld_itm fld) {
fld.Primary_y_();
}
- private static final byte[] Hook = Bry_.new_a7("primary"), Bry_key = Bry_.new_a7("key");
- public static final Dbmeta_fld_wkr__primary_key Instance = new Dbmeta_fld_wkr__primary_key();
+ private static final byte[] Hook = Bry_.new_a7("primary"), Bry_key = Bry_.new_a7("key");
+ public static final Dbmeta_fld_wkr__primary_key Instance = new Dbmeta_fld_wkr__primary_key();
}
class Dbmeta_fld_wkr__autonumber extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__autonumber() {this.Ctor(Hook);}
@Override protected void When_match(Dbmeta_fld_itm fld) {
fld.Autonum_y_();
}
- private static final byte[] Hook = Bry_.new_a7("autoincrement");
- public static final Dbmeta_fld_wkr__autonumber Instance = new Dbmeta_fld_wkr__autonumber();
+ private static final byte[] Hook = Bry_.new_a7("autoincrement");
+ public static final Dbmeta_fld_wkr__autonumber Instance = new Dbmeta_fld_wkr__autonumber();
}
class Dbmeta_fld_wkr__default extends Dbmeta_fld_wkr__base {
public Dbmeta_fld_wkr__default() {this.Ctor(Hook);}
@@ -143,6 +143,6 @@ class Dbmeta_fld_wkr__default extends Dbmeta_fld_wkr__base {
return String_.new_a7(src, bgn, end);
}
@Override protected void When_match(Dbmeta_fld_itm fld) {}
- private static final byte[] Hook = Bry_.new_a7("default");
- public static final Dbmeta_fld_wkr__default Instance = new Dbmeta_fld_wkr__default();
+ private static final byte[] Hook = Bry_.new_a7("default");
+ public static final Dbmeta_fld_wkr__default Instance = new Dbmeta_fld_wkr__default();
}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java
index e16ffee5b..e24c8d13a 100644
--- a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java
@@ -19,6 +19,7 @@ package gplx.dbs.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.db
import gplx.core.brys.*; import gplx.core.btries.*;
import gplx.dbs.engines.sqlite.*;
public class Dbmeta_parser__fld {
+ private final Btrie_rv trv = new Btrie_rv();
public Dbmeta_fld_itm Parse_fld(Sql_bry_rdr rdr) { // starts after "(" or ","; EX: "(fld1 int", ", fld2 int"; ends at ")"
byte[] name = rdr.Read_sql_identifier();
Dbmeta_fld_tid type = this.Parse_type(rdr);
@@ -41,12 +42,12 @@ public class Dbmeta_parser__fld {
}
return fld;
}
- Dbmeta_fld_wkr__base type_wkr = (Dbmeta_fld_wkr__base)rdr.Chk_trie_as_obj(fld_trie);
+ Dbmeta_fld_wkr__base type_wkr = (Dbmeta_fld_wkr__base)rdr.Chk_trie_as_obj(trv, fld_trie);
switch (type_wkr.Tid()) {
case Dbmeta_fld_wkr__base.Tid_end_comma:
case Dbmeta_fld_wkr__base.Tid_end_paren: return fld;
default:
- rdr.Move_to(fld_trie.Match_pos());
+ rdr.Move_to(trv.Pos());
type_wkr.Match(rdr, fld);
break;
}
@@ -54,7 +55,7 @@ public class Dbmeta_parser__fld {
}
@gplx.Internal protected Dbmeta_fld_tid Parse_type(Bry_rdr rdr) {
rdr.Skip_ws();
- Dbmeta_parser__fld_itm type_itm = (Dbmeta_parser__fld_itm)rdr.Chk_trie_as_obj(type_trie);
+ Dbmeta_parser__fld_itm type_itm = (Dbmeta_parser__fld_itm)rdr.Chk_trie_as_obj(trv, type_trie);
rdr.Move_by(type_itm.Word().length);
int paren_itms_count = type_itm.Paren_itms_count();
int len_1 = Int_.Min_value, len_2 = Int_.Min_value;
diff --git a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java
index 2505a73c0..3ba3d2e18 100644
--- a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java
+++ b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java
@@ -25,7 +25,7 @@ public abstract class Db_in_wkr__base {
public void Select_in(Cancelable cancelable, Db_conn conn, int full_bgn, int full_end) {
int part_len = Interval();
Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Instance;
- boolean show_progress = this.Show_progress();
+ boolean show_progress = this.Show_progress();;
for (int part_bgn = full_bgn; part_bgn < full_end; part_bgn += part_len) {
int part_end = part_bgn + part_len;
if (part_end > full_end) part_end = full_end;
diff --git a/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java b/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java
index 605087b37..ed6e8493c 100644
--- a/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java
+++ b/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java
@@ -18,9 +18,7 @@ along with this program. If not, see .
package gplx.core.ios; import gplx.*; import gplx.core.*;
import gplx.core.ios.streams.*;
public class Io_stream_zip_mgr {
- private final Bry_bfr bfr = Bry_bfr_.Reset(256);
private Io_stream_wtr wtr_gzip, wtr_zip, wtr_bzip2;
- private Io_stream_rdr rdr_gzip, rdr_zip, rdr_bzip2;
public byte[] Zip(byte type, byte[] val) {
if (type == Io_stream_.Tid_raw) return val;
Io_stream_wtr wtr = Wtr(type);
@@ -29,14 +27,13 @@ public class Io_stream_zip_mgr {
return wtr.To_ary_and_clear();
}
public byte[] Unzip(byte type, byte[] val) {
- synchronized (this) { // LOCK:static-obj;rdr_*;necessary; DATE:2016-07-06
- if (type == Io_stream_.Tid_raw) return val;
- Io_stream_rdr rdr = Rdr(type);
- rdr.Open_mem(val);
- return Io_stream_rdr_.Load_all_as_bry(bfr, rdr);
- }
+ if (type == Io_stream_.Tid_raw) return val;
+ Io_stream_rdr rdr = Rdr(type);
+ rdr.Open_mem(val);
+ return Io_stream_rdr_.Load_all_as_bry(Bry_bfr_.New(), rdr);
}
private Io_stream_wtr Wtr(byte type) {
+ Bry_bfr bfr = Bry_bfr_.New();
switch (type) {
case Io_stream_.Tid_gzip : if (wtr_gzip == null) wtr_gzip = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_gzip) ; return wtr_gzip.Open();
case Io_stream_.Tid_zip : if (wtr_zip == null) wtr_zip = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_zip) ; return wtr_zip.Open();
@@ -45,11 +42,11 @@ public class Io_stream_zip_mgr {
default : throw Err_.new_unhandled(type);
}
}
- private Io_stream_rdr Rdr(byte type) {
+ private Io_stream_rdr Rdr(byte type) { // TS.MEM: DATE:2016-07-12
switch (type) {
- case Io_stream_.Tid_gzip : if (rdr_gzip == null) rdr_gzip = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_gzip) ; return rdr_gzip;
- case Io_stream_.Tid_zip : if (rdr_zip == null) rdr_zip = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_zip) ; return rdr_zip;
- case Io_stream_.Tid_bzip2 : if (rdr_bzip2 == null) rdr_bzip2 = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_bzip2) ; return rdr_bzip2;
+ case Io_stream_.Tid_gzip : return Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_gzip);
+ case Io_stream_.Tid_zip : return Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_zip);
+ case Io_stream_.Tid_bzip2 : return Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_bzip2);
case Io_stream_.Tid_raw :
default : throw Err_.new_unhandled(type);
}
diff --git a/400_xowa/src/gplx/core/net/Gfo_url_parser.java b/400_xowa/src/gplx/core/net/Gfo_url_parser.java
index b8b01a941..9463c356b 100644
--- a/400_xowa/src/gplx/core/net/Gfo_url_parser.java
+++ b/400_xowa/src/gplx/core/net/Gfo_url_parser.java
@@ -22,6 +22,7 @@ public class Gfo_url_parser {
private final Btrie_slim_mgr protocols = Btrie_slim_mgr.ci_a7(); // ASCII:url_protocol; EX:"http:", "ftp:", etc
private final Bry_ary segs_ary = new Bry_ary(4), qargs = new Bry_ary(4);
private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(500);
+ private final Btrie_rv trv = new Btrie_rv();
public byte[] Relative_url_protocol_bry() {return Gfo_protocol_itm.Itm_https.Key_w_colon_bry();} // NOTE: https b/c any WMF wiki will now default to WMF; DATE:2015-07-26
public Gfo_url_parser() {
Init_protocols(Gfo_protocol_itm.Ary());
@@ -76,8 +77,8 @@ public class Gfo_url_parser {
path_bgn = qarg_key_bgn = qarg_val_bgn = anch_bgn = anch_nth_bgn = -1;
segs_ary.Clear(); qargs.Clear();
int pos = src_bgn;
- Object protocol_obj = protocols.Match_bgn(src, src_bgn, src_end);
- pos = protocols.Match_pos();
+ Object protocol_obj = protocols.Match_at(trv, src, src_bgn, src_end);
+ pos = trv.Pos();
pos = Bry_find_.Find_fwd_while(src, pos, src_end, Byte_ascii.Slash);
if (protocol_obj == null) {
this.protocol_tid = Gfo_protocol_itm.Tid_unknown;
diff --git a/400_xowa/src/gplx/core/net/Http_request_parser.java b/400_xowa/src/gplx/core/net/Http_request_parser.java
index 6853940f5..80c22abcb 100644
--- a/400_xowa/src/gplx/core/net/Http_request_parser.java
+++ b/400_xowa/src/gplx/core/net/Http_request_parser.java
@@ -22,7 +22,7 @@ public class Http_request_parser {
private int type, content_length;
private byte[] url, protocol, host, user_agent, accept, accept_language, accept_encoding, x_requested_with, cookie, referer, content_type, content_type_boundary, connection, pragma, cache_control, origin;
private Http_post_data_hash post_data_hash;
- private final Bry_bfr tmp_bfr = Bry_bfr_.New_w_size(255);
+ private final Bry_bfr tmp_bfr = Bry_bfr_.New_w_size(255); private final Btrie_rv trv = new Btrie_rv();
private final Http_server_wtr server_wtr; private final boolean log;
public Http_request_parser(Http_server_wtr server_wtr, boolean log) {this.server_wtr = server_wtr; this.log = log;}
public void Clear() {
@@ -59,12 +59,12 @@ public class Http_request_parser {
}
break; // assume form_data sends POST request
}
- Object o = trie.Match_bgn(line, 0, line_len);
+ Object o = trie.Match_at(trv, line, 0, line_len);
if (o == null) {
server_wtr.Write_str_w_nl(String_.Format("http.request.parser; unknown line; line={0} request={1}", line_str, To_str()));
continue;
}
- int val_bgn = Bry_find_.Find_fwd_while_ws(line, trie.Match_pos(), line_len); // skip ws after key; EX: "Host: "
+ int val_bgn = Bry_find_.Find_fwd_while_ws(line, trv.Pos(), line_len); // skip ws after key; EX: "Host: "
int tid = ((Int_obj_val)o).Val();
switch (tid) {
case Tid_get:
diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java b/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java
index ea0075ef7..5ce0c5ef3 100644
--- a/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java
+++ b/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java
@@ -27,7 +27,7 @@ class Gfs_lxr_whitespace implements Gfs_lxr {
int rv = Gfs_lxr_.Rv_eos, cur_pos;
for (cur_pos = end; cur_pos < src_len; cur_pos++) {
byte b = src[cur_pos];
- Object o = ctx.Trie().Match_bgn_w_byte(b, src, cur_pos, src_len);
+ Object o = ctx.Trie().Match_at_w_b0(ctx.Trie_rv(), b, src, cur_pos, src_len);
if (o == null) {
rv = Gfs_lxr_.Rv_null;
ctx.Process_null(cur_pos);
@@ -45,7 +45,7 @@ class Gfs_lxr_whitespace implements Gfs_lxr {
}
return rv;
}
- public static final Gfs_lxr_whitespace Instance = new Gfs_lxr_whitespace(); Gfs_lxr_whitespace() {}
+ public static final Gfs_lxr_whitespace Instance = new Gfs_lxr_whitespace(); Gfs_lxr_whitespace() {}
}
class Gfs_lxr_comment_flat implements Gfs_lxr {
public Gfs_lxr_comment_flat(byte[] bgn_bry, byte[] end_bry) {
@@ -69,7 +69,7 @@ class Gfs_lxr_identifier implements Gfs_lxr {
int pos, rv = Gfs_lxr_.Rv_eos;
for (pos = end; pos < src_len; pos++) {
byte b = src[pos];
- Object o = ctx.Trie().Match_bgn_w_byte(b, src, pos, src_len);
+ Object o = ctx.Trie().Match_at_w_b0(ctx.Trie_rv(), b, src, pos, src_len);
if (o == null) { // invalid char; stop;
rv = Gfs_lxr_.Rv_null;
ctx.Process_null(pos);
@@ -89,7 +89,7 @@ class Gfs_lxr_identifier implements Gfs_lxr {
if (rv == Gfs_lxr_.Rv_eos) ctx.Process_eos(); // eos
return rv;
}
- public static final Gfs_lxr_identifier Instance = new Gfs_lxr_identifier(); Gfs_lxr_identifier() {}
+ public static final Gfs_lxr_identifier Instance = new Gfs_lxr_identifier(); Gfs_lxr_identifier() {}
}
class Gfs_lxr_semic implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_semic;}
@@ -103,7 +103,7 @@ class Gfs_lxr_semic implements Gfs_lxr {
}
return end;
}
- public static final Gfs_lxr_semic Instance = new Gfs_lxr_semic(); Gfs_lxr_semic() {}
+ public static final Gfs_lxr_semic Instance = new Gfs_lxr_semic(); Gfs_lxr_semic() {}
}
class Gfs_lxr_dot implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_dot;}
@@ -115,7 +115,7 @@ class Gfs_lxr_dot implements Gfs_lxr {
}
return end;
}
- public static final Gfs_lxr_dot Instance = new Gfs_lxr_dot(); Gfs_lxr_dot() {}
+ public static final Gfs_lxr_dot Instance = new Gfs_lxr_dot(); Gfs_lxr_dot() {}
}
class Gfs_lxr_paren_bgn implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_paren_bgn;}
@@ -126,7 +126,7 @@ class Gfs_lxr_paren_bgn implements Gfs_lxr {
}
return end;
}
- public static final Gfs_lxr_paren_bgn Instance = new Gfs_lxr_paren_bgn(); Gfs_lxr_paren_bgn() {}
+ public static final Gfs_lxr_paren_bgn Instance = new Gfs_lxr_paren_bgn(); Gfs_lxr_paren_bgn() {}
}
class Gfs_lxr_paren_end implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_paren_end;}
@@ -139,7 +139,7 @@ class Gfs_lxr_paren_end implements Gfs_lxr {
}
return end;
}
- public static final Gfs_lxr_paren_end Instance = new Gfs_lxr_paren_end(); Gfs_lxr_paren_end() {}
+ public static final Gfs_lxr_paren_end Instance = new Gfs_lxr_paren_end(); Gfs_lxr_paren_end() {}
}
class Gfs_lxr_quote implements Gfs_lxr {
public Gfs_lxr_quote(byte[] bgn_bry, byte[] end_bry) {
@@ -184,7 +184,7 @@ class Gfs_lxr_curly_bgn implements Gfs_lxr {
}
return end;
}
- public static final Gfs_lxr_curly_bgn Instance = new Gfs_lxr_curly_bgn(); Gfs_lxr_curly_bgn() {}
+ public static final Gfs_lxr_curly_bgn Instance = new Gfs_lxr_curly_bgn(); Gfs_lxr_curly_bgn() {}
}
class Gfs_lxr_curly_end implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_curly_end;}
@@ -192,7 +192,7 @@ class Gfs_lxr_curly_end implements Gfs_lxr {
ctx.Stack_pop(bgn);
return end;
}
- public static final Gfs_lxr_curly_end Instance = new Gfs_lxr_curly_end(); Gfs_lxr_curly_end() {}
+ public static final Gfs_lxr_curly_end Instance = new Gfs_lxr_curly_end(); Gfs_lxr_curly_end() {}
}
class Gfs_lxr_equal implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_eq;}
@@ -200,7 +200,7 @@ class Gfs_lxr_equal implements Gfs_lxr {
ctx.Make_nde(bgn, end).Op_tid_(Gfs_nde.Op_tid_assign);
return end;
}
- public static final Gfs_lxr_equal Instance = new Gfs_lxr_equal(); Gfs_lxr_equal() {}
+ public static final Gfs_lxr_equal Instance = new Gfs_lxr_equal(); Gfs_lxr_equal() {}
}
class Gfs_lxr_comma implements Gfs_lxr {
public int Lxr_tid() {return Gfs_lxr_.Tid_comma;}
@@ -210,5 +210,5 @@ class Gfs_lxr_comma implements Gfs_lxr {
}
return end;
}
- public static final Gfs_lxr_comma Instance = new Gfs_lxr_comma(); Gfs_lxr_comma() {}
+ public static final Gfs_lxr_comma Instance = new Gfs_lxr_comma(); Gfs_lxr_comma() {}
}
diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_parser.java b/400_xowa/src/gplx/langs/gfs/Gfs_parser.java
index 5c96684c5..dc6ee8576 100644
--- a/400_xowa/src/gplx/langs/gfs/Gfs_parser.java
+++ b/400_xowa/src/gplx/langs/gfs/Gfs_parser.java
@@ -18,8 +18,8 @@ along with this program. If not, see .
package gplx.langs.gfs; import gplx.*; import gplx.langs.*;
import gplx.core.btries.*;
public class Gfs_parser {
- Btrie_fast_mgr trie = Gfs_parser_.trie_();
- Gfs_parser_ctx ctx = new Gfs_parser_ctx();
+ private final Btrie_fast_mgr trie = Gfs_parser_.trie_();
+ private final Gfs_parser_ctx ctx = new Gfs_parser_ctx();
public Gfs_nde Parse(byte[] src) {
ctx.Root().Subs_clear();
int src_len = src.length; if (src_len == 0) return ctx.Root();
@@ -27,13 +27,13 @@ public class Gfs_parser {
int pos = 0;
while (pos < src_len) {
byte b = src[pos];
- Object o = trie.Match_bgn_w_byte(b, src, pos, src_len);
+ Object o = trie.Match_at_w_b0(ctx.Trie_rv(), b, src, pos, src_len);
if (o == null)
ctx.Err_mgr().Fail_unknown_char(ctx, pos, b);
else {
Gfs_lxr lxr = (Gfs_lxr)o;
while (lxr != null) {
- int rslt = lxr.Process(ctx, pos, trie.Match_pos());
+ int rslt = lxr.Process(ctx, pos, ctx.Trie_rv().Pos());
switch (lxr.Lxr_tid()) {
case Gfs_lxr_.Tid_whitespace: break;
case Gfs_lxr_.Tid_comment: break;
diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java b/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java
index 16eb0eb7e..6d1abd98c 100644
--- a/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java
+++ b/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java
@@ -19,6 +19,7 @@ package gplx.langs.gfs; import gplx.*; import gplx.langs.*;
import gplx.core.btries.*;
class Gfs_parser_ctx {
public Btrie_fast_mgr Trie() {return trie;} Btrie_fast_mgr trie;
+ public Btrie_rv Trie_rv() {return trie_rv;} private final Btrie_rv trie_rv = new Btrie_rv();
public Gfs_nde Root() {return root;} Gfs_nde root = new Gfs_nde();
public byte[] Src() {return src;} private byte[] src;
public int Src_len() {return src_len;} private int src_len;
diff --git a/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java b/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java
index 5e841d84f..684039f26 100644
--- a/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java
+++ b/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java
@@ -50,6 +50,7 @@ public class Gfh_atr_ {
, Bry__align = Bry_.new_a7("align") // HTML.v4
, Bry__bgcolor = Bry_.new_a7("bgcolor") // HTML.v4
, Bry__abbr = Bry_.new_a7("abbr") // HTML.ua
+ , Bry__srcset = Bry_.new_a7("srcset")
;
public static byte[] Make(Bry_bfr bfr, byte[] key, byte[] val) {
return bfr.Add_byte_space().Add(key).Add_byte_eq().Add_byte_quote().Add(val).Add_byte_quote().To_bry_and_clear();
@@ -66,4 +67,9 @@ public class Gfh_atr_ {
bfr.Add_int_variable(val);
bfr.Add_byte_quote();
}
+ public static void Add_double(Bry_bfr bfr, byte[] key, double val) {
+ bfr.Add_byte_space().Add(key).Add_byte_eq().Add_byte_quote();
+ bfr.Add_double(val);
+ bfr.Add_byte_quote();
+ }
}
diff --git a/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java
index 73da777e1..2bf296e8c 100644
--- a/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java
+++ b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java
@@ -65,6 +65,14 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr
, Id__del = 41
, Id__strike = 42
, Id__tt = 43
+ , Id__code = 44
+ , Id__wbr = 45
+ , Id__center = 46 // en.v:Vandalism_in_progress
+ , Id__dfn = 47
+ , Id__kbd = 48
+ , Id__samp = 49
+ , Id__ins = 50
+ , Id__em = 51
;
public static final byte[]
Bry__a = Bry_.new_a7("a")
@@ -122,6 +130,14 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr
.Add_str_int("del" , Id__del)
.Add_str_int("strike" , Id__strike)
.Add_str_int("tt" , Id__tt)
+ .Add_str_int("code" , Id__code)
+ .Add_str_int("wbr" , Id__wbr)
+ .Add_str_int("center" , Id__center)
+ .Add_str_int("dfn" , Id__dfn)
+ .Add_str_int("kbd" , Id__kbd)
+ .Add_str_int("samp" , Id__samp)
+ .Add_str_int("ins" , Id__ins)
+ .Add_str_int("em" , Id__em)
;
public static String To_str(int tid) {
switch (tid) {
@@ -172,6 +188,14 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr
case Id__del: return "del";
case Id__strike: return "strike";
case Id__tt: return "tt";
+ case Id__code: return "code";
+ case Id__wbr: return "wbr";
+ case Id__center: return "center";
+ case Id__dfn: return "dfn";
+ case Id__kbd: return "kbd";
+ case Id__samp: return "samp";
+ case Id__ins: return "ins";
+ case Id__em: return "em";
default: throw Err_.new_unhandled(tid);
}
}
@@ -184,8 +208,7 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr
, I_lhs = Bry_.new_a7("") , I_rhs = Bry_.new_a7("")
, P_lhs = Bry_.new_a7("
") , P_rhs = Bry_.new_a7("
")
, Pre_lhs = Bry_.new_a7("") , Pre_rhs = Bry_.new_a7("
")
- , Div_lhs = Bry_.new_a7("") , Div_rhs = Bry_.new_a7("
")
- , Div_lhs_bgn = Bry_.new_a7("") , Div_rhs = Bry_.new_a7("
") , Div_lhs_bgn = Bry_.new_a7("")
, Head_lhs_bgn = Bry_.new_a7("")
, Style_lhs_w_type = Bry_.new_a7("