# HG changeset patch # User Jaroslav Tulach # Date 1425057114 -3600 # Node ID 18b3a9a85716fcfe01a6bcd87f2082a9ceae7922 # Parent e109b671a19e0d3eb7f98153eedc35b244cb311d addIfMissing to iterate over the array just once diff -r e109b671a19e -r 18b3a9a85716 rt/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java Fri Feb 27 13:50:37 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java Fri Feb 27 18:11:54 2015 +0100 @@ -32,16 +32,23 @@ } public void add(String s) { + add(s, false); + } + private boolean add(String s, boolean check) { if (arr == null) { arr = new String[1]; } else { String[] tmp = new String[arr.length + 1]; for (int i = 0; i < arr.length; i++) { + if (check && s.equals(arr[i])) { + return false; + } tmp[i] = arr[i]; } arr = tmp; } arr[arr.length - 1] = s; + return true; } StringArray addAndNew(String... values) { @@ -130,4 +137,8 @@ void clear() { arr = null; } + + boolean addIfMissing(String s) { + return add(s, true); + } } diff -r e109b671a19e -r 18b3a9a85716 rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Fri Feb 27 13:50:37 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Fri Feb 27 18:11:54 2015 +0100 @@ -291,11 +291,7 @@ @Override protected boolean requireReference(String cn) { - if (references.contains(cn)) { - return false; - } - references.add(cn); - return true; + return references.addIfMissing(cn); } @Override diff -r e109b671a19e -r 18b3a9a85716 rt/vm/src/test/java/org/apidesign/vm4brwsr/BytesLoader.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/BytesLoader.java Fri Feb 27 13:50:37 2015 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/BytesLoader.java Fri Feb 27 18:11:54 2015 +0100 @@ -30,10 +30,9 @@ private static final StringArray requested = new StringArray(); public byte[] get(String name) throws IOException { - if (requested.contains(name)) { + if (!requested.addIfMissing(name)) { throw new IllegalStateException("Requested for second time: " + name); } - requested.add(name); byte[] arr = readClass(name); /* System.err.print("loader['" + name + "'] = [");