mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.9.4.1
This commit is contained in:
@@ -18,19 +18,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.core.primitives; import gplx.*; import gplx.core.*;
|
||||
public class Int_pool {
|
||||
private final List_adp available_list = List_adp_.new_(); private int available_len;
|
||||
// private final Bry_bfr dbg_bfr = Bry_bfr.new_();
|
||||
private int uid_max = -1;
|
||||
public void Clear() {
|
||||
available_list.Clear();
|
||||
available_len = 0;
|
||||
uid_max = -1;
|
||||
synchronized (available_list) {
|
||||
available_list.Clear();
|
||||
available_len = 0;
|
||||
uid_max = -1;
|
||||
}
|
||||
}
|
||||
public int Get_next() {
|
||||
synchronized (available_list) {
|
||||
if (available_len == 0)
|
||||
if (available_len == 0) {
|
||||
// dbg_bfr.Add_str("+:u:").Add_int_variable(uid_max + 1).Add_byte_nl();
|
||||
return ++uid_max;
|
||||
}
|
||||
else {
|
||||
Int_obj_val val = (Int_obj_val)List_adp_.Pop_last(available_list);
|
||||
--available_len;
|
||||
// dbg_bfr.Add_str("+:a:").Add_int_variable(val.Val()).Add_byte_nl();
|
||||
return val.Val();
|
||||
}
|
||||
}
|
||||
@@ -40,17 +46,22 @@ public class Int_pool {
|
||||
synchronized (available_list) {
|
||||
if (available_len == 0 && v == uid_max) {
|
||||
--this.uid_max;
|
||||
// dbg_bfr.Add_str("-:m:").Add_int_variable(v).Add_byte_nl();
|
||||
return;
|
||||
}
|
||||
if (available_len == uid_max) {
|
||||
available_list.Add(Int_obj_val.new_(v));
|
||||
available_list.Sort();
|
||||
for (int i = 0; i < available_len; ++i) {
|
||||
Int_obj_val itm = (Int_obj_val)available_list.Get_at(i);
|
||||
if (i != itm.Val()) throw Err_.new_("core", "available_list out of order", "contents", available_list.To_str());
|
||||
if (i != itm.Val())
|
||||
throw Err_.new_("core", "available_list out of order", "contents", available_list.To_str());
|
||||
}
|
||||
// dbg_bfr.Add_str("-:c:").Add_int_variable(v).Add_byte_nl();
|
||||
this.Clear();
|
||||
}
|
||||
else {
|
||||
// dbg_bfr.Add_str("-:a:").Add_int_variable(v).Add_byte_nl();
|
||||
available_list.Add(Int_obj_val.new_(v));
|
||||
++available_len;
|
||||
}
|
||||
|
||||
@@ -52,6 +52,14 @@ public class Int_pool_tst {
|
||||
tstr.Exec_del(2);
|
||||
tstr.Test_get(0);
|
||||
}
|
||||
@Test public void Del__out_of_order_2() {
|
||||
tstr.Test_get(0);
|
||||
tstr.Test_get(1);
|
||||
tstr.Test_get(2);
|
||||
tstr.Exec_del(1);
|
||||
tstr.Exec_del(2);
|
||||
tstr.Exec_del(0);
|
||||
}
|
||||
}
|
||||
class Int_pool_tstr {
|
||||
private final Int_pool pool = new Int_pool();
|
||||
|
||||
Reference in New Issue
Block a user