1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

v2.12.1.1

This commit is contained in:
gnosygnu
2015-12-06 23:12:52 -05:00
parent 097e6c7f80
commit 9509363f46
337 changed files with 3473 additions and 1917 deletions

View File

@@ -0,0 +1,52 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.core.brys; import gplx.*; import gplx.core.*;
public class Bry_diff_ {
public static byte[][] Diff_1st_line(byte[] lhs, byte[] rhs) {return Diff_1st(lhs, 0, lhs.length, rhs, 0, rhs.length, Byte_ascii.Nl_bry, Byte_ascii.Angle_bgn_bry, 255);}
public static byte[][] Diff_1st(byte[] lhs, int lhs_bgn, int lhs_end, byte[] rhs, int rhs_bgn, int rhs_end, byte[] stop, byte[] show, int diff_max) {
int lhs_len = lhs_end - lhs_bgn;
int rhs_len = rhs_end - rhs_bgn;
int len = lhs_len < rhs_len ? lhs_len : rhs_len;
int lhs_idx = -1, rhs_idx = -1;
for (int i = 0; i < len; ++i) {
byte lhs_byte = lhs[i + lhs_bgn];
byte rhs_byte = rhs[i + rhs_bgn];
if (lhs_byte != rhs_byte) {lhs_idx = rhs_idx = i; break;} // diff; stop iterating
}
if (lhs_idx == -1 && rhs_idx == -1) {
switch (Int_.Compare(lhs_len, rhs_len)) {
case CompareAble_.Same: return null;
case CompareAble_.Less: lhs_idx = rhs_idx = lhs_len; break;
case CompareAble_.More: lhs_idx = rhs_idx = rhs_len; break;
}
}
byte[] lhs_diff = Get_1st(stop, show, lhs, lhs_idx, lhs_len, diff_max);
byte[] rhs_diff = Get_1st(stop, show, rhs, rhs_idx, rhs_len, diff_max);
return new byte[][] {lhs_diff, rhs_diff};
}
private static byte[] Get_1st(byte[] stop, byte[] show, byte[] src, int bgn, int end, int diff_max) {
if (bgn == end) return Bry__eos;
int prv_show = Bry_find_.Find_bwd(src, show, bgn , 0); if (prv_show == Bry_find_.Not_found) prv_show = 0;
int prv_stop = Bry_find_.Find_bwd(src, stop, bgn , 0); prv_stop = (prv_stop == Bry_find_.Not_found) ? 0 : prv_stop + 1;
int prv = prv_show > prv_stop ? prv_show : prv_stop;
int nxt = Bry_find_.Find_fwd(src, stop, bgn , end); if (nxt == Bry_find_.Not_found) nxt = end;
if (nxt - prv > 255) nxt = prv + diff_max;
return Bry_.Mid(src, prv, nxt);
}
private static final byte[] Bry__eos = Bry_.new_a7("<<EOS>>");
}

View File

@@ -0,0 +1,44 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.core.brys; import gplx.*; import gplx.core.*;
import org.junit.*;
public class Bry_diff_tst {
@Before public void init() {} private final Bry_diff_fxt fxt = new Bry_diff_fxt();
@Test public void Diff_1st() {
fxt.Test__diff_1st("a|b|c" , "a|b|c" , null , null);
fxt.Test__diff_1st("a|b|c" , "a|b1|c" , "b" , "b1");
fxt.Test__diff_1st("a|b|" , "a|b|c" , "<<EOS>>" , "c");
fxt.Test__diff_1st("a|b|c" , "a|b|" , "c" , "<<EOS>>");
}
@Test public void Diff_1st_show() {
fxt.Test__diff_1st("a|b<c>d|e" , "a|b<c>e|e" , "<c>d", "<c>e");
}
}
class Bry_diff_fxt {
public void Test__diff_1st(String lhs, String rhs, String expd_lhs, String expd_rhs) {
byte[] lhs_src = Bry_.new_u8(lhs);
byte[] rhs_src = Bry_.new_u8(rhs);
byte[][] actl = Bry_diff_.Diff_1st(lhs_src, 0, lhs_src.length, rhs_src, 0, rhs_src.length, Byte_ascii.Pipe_bry, Byte_ascii.Angle_bgn_bry, 255);
if (expd_lhs == null && expd_rhs == null)
Tfds.Eq_true(actl == null, "actl not null");
else {
Tfds.Eq_bry(Bry_.new_u8(expd_lhs), actl[0]);
Tfds.Eq_bry(Bry_.new_u8(expd_rhs), actl[1]);
}
}
}

View File

@@ -0,0 +1,47 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.core.brys; import gplx.*; import gplx.core.*;
import gplx.core.errs.*;
public class Bry_err_wkr {
private String sect; private int sect_bgn;
public byte[] Src() {return src;} private byte[] src;
public String Page() {return page;} private String page;
public void Fail_throws_err_(boolean v) {this.fail_throws_err = v;} private boolean fail_throws_err = true;
public void Init_by_page(String page, byte[] src) {this.page = page; this.src = src;}
public void Init_by_sect(String sect, int sect_bgn) {this.sect = sect; this.sect_bgn = sect_bgn;}
public int Fail(String msg, Object... args) {return Fail(msg, sect_bgn, sect_bgn + 255, args);}
private int Fail(String msg, int excerpt_bgn, int excerpt_end, Object[] args) {
String err_msg = Make_msg(msg, excerpt_bgn, excerpt_end, args);
Gfo_usr_dlg_.Instance.Warn_many("", "", err_msg);
if (fail_throws_err) throw Err_.new_("Bry_err_wkr", err_msg).Logged_y_();
return Bry_find_.Not_found;
}
private String Make_msg(String msg, int excerpt_bgn, int excerpt_end, Object[] args) {
int args_len = args.length;
args_len += 6;
args = (Object[])Array_.Resize(args, args_len);
args[args_len - 6] = "page"; args[args_len - 5] = Quote(page);
args[args_len - 4] = "sect"; args[args_len - 3] = Quote(sect);
args[args_len - 2] = "text"; args[args_len - 1] = Bry_.Escape_ws(Bry_.Mid_safe(src, excerpt_bgn, excerpt_end));
for (int i = 0; i < args_len - 6; i += 2) {
args[i + 1] = Quote(Object_.Xto_str_strict_or_null_mark(args[i + 1]));
}
return Err_msg.To_str(msg, args);
}
private static String Quote(String v) {return "'" + v + "'";}
}

View File

@@ -19,18 +19,20 @@ package gplx.core.brys; import gplx.*; import gplx.core.*;
import gplx.core.errs.*;
public class Bry_rdr {
private final gplx.core.primitives.Int_obj_ref pos_ref = gplx.core.primitives.Int_obj_ref.neg1_();
private String ctx; private String wkr; private int err_bgn;
public byte[] Src() {return src;} private byte[] src;
public int Pos() {return pos;} private int pos;
public int Src_end() {return src_end;} private int src_end;
public Bry_rdr Dflt_dlm_(byte b) {this.dflt_dlm = b; return this;} private byte dflt_dlm;
public Bry_rdr Fail_throws_err_(boolean v) {this.fail_throws_err = v; return this;} private boolean fail_throws_err = true;
public Bry_rdr Init_by_page(byte[] ctx, byte[] src, int src_len) {this.ctx = Quote(String_.new_u8(ctx)); this.src = src; this.src_end = src_len; this.pos = 0; return this;}
public Bry_rdr Init_by_hook(String wkr, int err_bgn, int pos) {this.wkr = Quote(wkr); this.err_bgn = err_bgn; this.pos = pos; return this;}
public Bry_rdr Init_by_sub(Bry_rdr rdr, String wkr, int pos, int src_end) {
this.src = rdr.src; this.ctx = rdr.ctx; this.wkr = Quote(wkr); this.err_bgn = pos; this.pos = pos; this.src_end = src_end;
public Bry_rdr Fail_throws_err_(boolean v) {err_wkr.Fail_throws_err_(v); return this;}
public Bry_rdr Init_by_page(byte[] page, byte[] src, int src_len) {err_wkr.Init_by_page(String_.new_u8(page), src); this.pos = 0; this.src = src; this.src_end = src_len; return this;}
public Bry_rdr Init_by_sect(String sect, int sect_bgn, int pos) {err_wkr.Init_by_sect(sect, sect_bgn); this.pos = pos; return this;}
public Bry_rdr Init_by_wkr (Bry_err_wkr wkr, String sect, int pos, int src_end) {
this.pos = pos; this.src = wkr.Src(); this.src_end = src_end;
err_wkr.Init_by_page(wkr.Page(), src);
err_wkr.Init_by_sect(sect, pos);
return this;
}
public Bry_err_wkr Err_wkr() {return err_wkr;} private Bry_err_wkr err_wkr = new Bry_err_wkr();
public int Move_to(int v) {this.pos = v; return pos;}
public int Move_by_one() {return Move_by(1);}
public int Move_by(int v) {this.pos += v; return pos;}
@@ -41,12 +43,12 @@ public class Bry_rdr {
public int Find_fwd_rr(byte find) {return Find_fwd(find , Bool_.N, Bool_.N);}
public int Find_fwd_rr(byte[] find) {return Find_fwd(find , Bool_.N, Bool_.N);}
private int Find_fwd(byte find, boolean ret_lhs, boolean pos_lhs) {
int find_pos = Bry_find_.Find_fwd(src, find, pos, src_end); if (find_pos == Bry_find_.Not_found) {Fail("find failed", "find", Byte_ascii.To_str(find)); return Bry_find_.Not_found;}
int find_pos = Bry_find_.Find_fwd(src, find, pos, src_end); if (find_pos == Bry_find_.Not_found) {err_wkr.Fail("find failed", "find", Byte_ascii.To_str(find)); return Bry_find_.Not_found;}
pos = find_pos + (pos_lhs ? 0 : 1);
return ret_lhs ? find_pos : pos;
}
private int Find_fwd(byte[] find, boolean ret_lhs, boolean pos_lhs) {
int find_pos = Bry_find_.Find_fwd(src, find, pos, src_end); if (find_pos == Bry_find_.Not_found) {Fail("find failed", "find", String_.new_u8(find)); return Bry_find_.Not_found;}
int find_pos = Bry_find_.Find_fwd(src, find, pos, src_end); if (find_pos == Bry_find_.Not_found) {err_wkr.Fail("find failed", "find", String_.new_u8(find)); return Bry_find_.Not_found;}
pos = find_pos + (pos_lhs ? 0 : find.length);
return ret_lhs ? find_pos : pos;
}
@@ -60,7 +62,7 @@ public class Bry_rdr {
byte rv = src[pos];
++pos;
if (pos < src_end) {
if (src[pos] != to_char) {Fail("read byte to failed", "to", Byte_ascii.To_str(to_char)); return Byte_.Max_value_127;}
if (src[pos] != to_char) {err_wkr.Fail("read byte to failed", "to", Byte_ascii.To_str(to_char)); return Byte_.Max_value_127;}
++pos;
}
return rv;
@@ -84,7 +86,7 @@ public class Bry_rdr {
break;
case Byte_ascii.Dash:
if (negative == -1) { // 2nd negative
Fail("invalid int", "mid", String_.new_u8(src, bgn, pos));
err_wkr.Fail("invalid int", "mid", String_.new_u8(src, bgn, pos));
return Int_.Min_value;
}
else // 1st negative
@@ -97,14 +99,14 @@ public class Bry_rdr {
match = true;
}
if (!match) {
Fail("invalid int", "mid", String_.new_u8(src, bgn, pos));
err_wkr.Fail("invalid int", "mid", String_.new_u8(src, bgn, pos));
return Int_.Min_value;
}
return rv * negative;
}
}
}
if (bgn == pos) {Fail("int is empty", String_.Empty, String_.Empty); return Int_.Min_value;}
if (bgn == pos) {err_wkr.Fail("int is empty"); return Int_.Min_value;}
return rv * negative;
}
public byte Read_byte_as_a7_int() {
@@ -135,13 +137,13 @@ public class Bry_rdr {
return rv;
}
public int Chk(byte find) {
if (src[pos] != find) {Fail("failed check", "chk", Byte_.To_str(find)); return Bry_find_.Not_found;}
if (src[pos] != find) {err_wkr.Fail("failed check", "chk", Byte_.To_str(find)); return Bry_find_.Not_found;}
++pos;
return pos;
}
public int Chk(byte[] find) {
int find_end = pos + find.length;
if (!Bry_.Match(src, pos, find_end, find)) {Fail("failed check", "chk", String_.new_u8(find)); return Bry_find_.Not_found;}
if (!Bry_.Match(src, pos, find_end, find)) {err_wkr.Fail("failed check", "chk", String_.new_u8(find)); return Bry_find_.Not_found;}
pos = find_end;
return pos;
}
@@ -149,7 +151,7 @@ public class Bry_rdr {
public byte Chk_or(gplx.core.btries.Btrie_slim_mgr trie, byte or) {return Chk_or(trie, pos, src_end, or);}
public byte Chk(gplx.core.btries.Btrie_slim_mgr trie, int itm_bgn, int itm_end) {
byte rv = Chk_or(trie, itm_bgn, itm_end, Byte_.Max_value_127);
if (rv == Byte_.Max_value_127) {Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16))); return 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))); return Byte_.Max_value_127;}
return rv;
}
public byte Chk_or(gplx.core.btries.Btrie_slim_mgr trie, int itm_bgn, int itm_end, byte or) {
@@ -158,20 +160,4 @@ public class Bry_rdr {
pos = trie.Match_pos();
return ((gplx.core.primitives.Byte_obj_val)rv_obj).Val();
}
public int Fail(String msg, String arg_key, Object arg_val) {return Fail(msg, arg_key, arg_val, err_bgn, err_bgn + 255);}
public int Fail(String msg, String arg_key, Object arg_val, int excerpt_bgn, int excerpt_end) {
arg_val = Quote(Object_.Xto_str_strict_or_null_mark(arg_val));
String err_msg = Msg_make(msg, arg_key, arg_val, excerpt_bgn, excerpt_end);
Gfo_usr_dlg_.Instance.Warn_many("", "", err_msg);
if (fail_throws_err) throw Err_.new_("Bry_rdr", err_msg).Logged_y_();
return Bry_find_.Not_found;
}
public Err Err_make(String msg, String arg_key, Object arg_val, int excerpt_bgn, int excerpt_end) {return Err_.new_("Bry_rdr", Msg_make(msg, arg_key, arg_val, excerpt_bgn, excerpt_end));}
private String Msg_make(String msg, String arg_key, Object arg_val, int excerpt_bgn, int excerpt_end) {
if (String_.EqEmpty(arg_key))
return Err_msg.To_str(msg, "ctx", ctx, "wkr", wkr, "excerpt", Bry_.Escape_ws(Bry_.Mid_safe(src, excerpt_bgn, excerpt_end)));
else
return Err_msg.To_str(msg, arg_key, arg_val, "ctx", ctx, "wkr", wkr, "excerpt", Bry_.Escape_ws(Bry_.Mid_safe(src, excerpt_bgn, excerpt_end)));
}
private static String Quote(String v) {return "'" + v + "'";}
}

View File

@@ -24,9 +24,12 @@ public class Int_flag_bldr {
this.val_ary = new int[pow_ary.length];
return this;
}
public Int_flag_bldr Set(int idx, int val) {val_ary[idx] = val; return this;}
public Int_flag_bldr Set(int idx, byte val) {val_ary[idx] = val; return this;}
public Int_flag_bldr Set(int idx, boolean val) {val_ary[idx] = val ? 1 : 0; return this;}
public boolean Set_as_bool(int idx, boolean val) {val_ary[idx] = val ? 1 : 0; return val;}
public byte Set_as_byte(int idx, byte val) {val_ary[idx] = val; return val;}
public int Set_as_int(int idx, int val) {val_ary[idx] = val; return val;}
public Int_flag_bldr Set(int idx, boolean val) {Set_as_bool(idx, val); return this;}
public Int_flag_bldr Set(int idx, byte val) {Set_as_byte(idx, val); return this;}
public Int_flag_bldr Set(int idx, int val) {Set_as_int(idx, val); return this;}
public int Get_as_int(int idx) {return val_ary[idx];}
public byte Get_as_byte(int idx) {return (byte)val_ary[idx];}
public boolean Get_as_bool(int idx) {return val_ary[idx] == 1;}

View File

@@ -59,7 +59,7 @@ class GfoCacheMgr_fxt {
return this;
}
}
class GfoCacheItm_mock implements RlsAble {
class GfoCacheItm_mock implements Rls_able {
public void Rls() {}
public String S() {return s;} private String s;
public GfoCacheItm_mock(String s) {this.s = s;}

View File

@@ -44,7 +44,7 @@ public class Gfo_cache_mgr {
hash.Del(itm.Key());
itm.Rls();
}
public void Add_replace(byte[] key, RlsAble val, int size) {
public void Add_replace(byte[] key, Rls_able val, int size) {
// Del(key);
// Add(key, val, size);
Object o = hash.Get_by(key);
@@ -57,7 +57,7 @@ public class Gfo_cache_mgr {
itm.Replace(val, size);
}
}
public void Add(byte[] key, RlsAble val, int size) {
public void Add(byte[] key, Rls_able val, int size) {
// if (cur_size + size > 600000000) ReduceCache();
cur_size += size;
// ++cur_size;
@@ -104,12 +104,12 @@ public class Gfo_cache_mgr {
}
}
}
class Gfo_cache_data implements gplx.CompareAble, RlsAble {
public Gfo_cache_data(byte[] key, RlsAble val, int size) {this.key = key; this.val = val; this.size = size; this.timestamp = Env_.TickCount();}
class Gfo_cache_data implements gplx.CompareAble, Rls_able {
public Gfo_cache_data(byte[] key, Rls_able val, int size) {this.key = key; this.val = val; this.size = size; this.timestamp = Env_.TickCount();}
public byte[] Key() {return key;} private byte[] key;
public RlsAble Val() {return val;} private RlsAble val;
public Rls_able Val() {return val;} private Rls_able val;
public int Size() {return size;} private int size;
public void Replace(RlsAble val, int size) {this.val = val; this.size = size;}
public void Replace(Rls_able val, int size) {this.val = val; this.size = size;}
public long Timestamp() {return timestamp;} public void Timestamp_update() {timestamp = Env_.TickCount();} private long timestamp;
public int compareTo(Object obj) {
Gfo_cache_data comp = (Gfo_cache_data)obj;

View File

@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.core.ios; import gplx.*; import gplx.core.*;
import gplx.core.ios.*;/*IoStream*/
public class Io_buffer_rdr implements RlsAble {
public class Io_buffer_rdr implements Rls_able {
private Io_stream_rdr rdr;
Io_buffer_rdr(Io_stream_rdr rdr, Io_url url, int bfr_len) {
this.rdr = rdr; this.url = url;

View File

@@ -45,12 +45,12 @@ public class Gfo_url_parser {
rel = true;
}
if (!rel) { // search for ":"; NOTE: only search if not rel; i.e.: "//"
int colon_pos = Bry_find_.Find_fwd(src, Byte_ascii.Colon, pos, src_end); // no colon found; EX: "//a.org/b"; "a.org/b"
int colon_pos = Bry_find_.Find_fwd(src, Byte_ascii.Colon, pos, src_end); // no colon found; EX: "//a.org/b"; "a.org/b"
if (colon_pos != Bry_find_.Not_found) // colon found; EX: "http://" or "https://"
pos = colon_pos + Int_.Const_dlm_len;
if (pos < src_end && src[pos] == Byte_ascii.Slash) { // skip slash after colon
if (pos < src_end && src[pos] == Byte_ascii.Slash) { // skip slash after colon
pos += 1;
if (pos < src_end && src[pos] == Byte_ascii.Slash) // skip 2nd slash after colon
if (pos < src_end && src[pos] == Byte_ascii.Slash) // skip 2nd slash after colon
pos += 1;
}
}

View File

@@ -17,8 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.core.threads.poolables; import gplx.*; import gplx.core.*; import gplx.core.threads.*;
public interface Gfo_poolable_itm {
int Pool__idx();
void Pool__clear (Object[] args);
Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args);
void Pool__rls();
}

View File

@@ -18,10 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.core.threads.poolables; import gplx.*; import gplx.core.*; import gplx.core.threads.*;
public class Gfo_poolable_mgr {
private final Object thread_lock = new Object();
private final Gfo_poolable_itm prototype; private final Object[] make_args, clear_args;
private final Gfo_poolable_itm prototype; private final Object[] make_args;
private Gfo_poolable_itm[] pool; private int pool_nxt, pool_len;
public Gfo_poolable_mgr(Gfo_poolable_itm prototype, Object[] make_args, Object[] clear_args, int init_pool_len, int pool_max) {// NOTE: random IndexOutOfBounds errors in Get around free_ary[--free_len] with free_len being -1; put member variable initialization within thread_lock to try to avoid; DATE:2014-09-21
this.prototype = prototype; this.make_args = make_args; this.clear_args = clear_args;
public Gfo_poolable_mgr(Gfo_poolable_itm prototype, Object[] make_args, int init_pool_len, int pool_max) {// NOTE: random IndexOutOfBounds errors in Get around free_ary[--free_len] with free_len being -1; put member variable initialization within thread_lock to try to avoid; DATE:2014-09-21
this.prototype = prototype; this.make_args = make_args;
this.pool_len = init_pool_len;
this.Clear_fast();
}
@@ -51,7 +51,6 @@ public class Gfo_poolable_mgr {
pool[pool_idx] = rv;
}
}
rv.Pool__clear(clear_args); // NOTE: ALWAYS call Clear when doing Get. caller may forget to call Clear, and reused bfr may have leftover bytes. unit tests will not catch, and difficult to spot in app
return rv;
}
public void Rls_safe(int idx) {synchronized (thread_lock) {Rls_safe(idx);}}

View File

@@ -17,5 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.core.threads.poolables; import gplx.*; import gplx.core.*; import gplx.core.threads.*;
public class Gfo_poolable_mgr_ {
public static Gfo_poolable_mgr New(int len, int max, Gfo_poolable_itm prototype) {return new Gfo_poolable_mgr(prototype, Object_.Ary_empty, Object_.Ary_empty, len, max);}
public static Gfo_poolable_mgr New(int len, int max, Gfo_poolable_itm prototype) {return new Gfo_poolable_mgr(prototype, Object_.Ary_empty, len, max);}
public static Gfo_poolable_mgr New(int len, int max, Gfo_poolable_itm prototype, Object[] make_args) {return new Gfo_poolable_mgr(prototype, make_args, len, max);}
}

View File

@@ -61,7 +61,7 @@ public class Gfo_poolable_mgr_tst {
}
}
class Gfo_poolable_mgr_tstr {
private final Gfo_poolable_mgr mgr = new Gfo_poolable_mgr(new Sample_poolable_itm(null, -1, Object_.Ary_empty), Object_.Ary("make"), Object_.Ary("clear"), 2, 8);
private final Gfo_poolable_mgr mgr = new Gfo_poolable_mgr(new Sample_poolable_itm(null, -1, Object_.Ary_empty), Object_.Ary("make"), 2, 8);
public void Clear() {mgr.Clear_fast();}
public void Test__get(int expd_idx) {
Sample_poolable_itm actl_itm = (Sample_poolable_itm)mgr.Get_fast();
@@ -78,8 +78,6 @@ class Sample_poolable_itm implements Gfo_poolable_itm {
public Sample_poolable_itm(Gfo_poolable_mgr pool_mgr, int pool_idx, Object[] make_args) {this.pool_mgr = pool_mgr; this.pool_idx = pool_idx; this.pool__make_args = make_args;}
public int Pool__idx() {return pool_idx;} private final int pool_idx;
public Object[] Pool__make_args() {return pool__make_args;} private final Object[] pool__make_args;
public Object[] Pool__clear_args() {return pool__clear_args;} private Object[] pool__clear_args;
public void Pool__clear (Object[] args) {this.pool__clear_args = args;}
public void Pool__rls() {pool_mgr.Rls_safe(pool_idx);}
public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {return new Sample_poolable_itm(pool_mgr, idx, args);}
}