private boolean noNegatives() { for (final String key : map.keyArray()) { if (Integer.parseInt(key) < 0) { return false; } } return true; }
@Override public Map<Integer, IntTo<X>> toMap(Map<Integer, IntTo<X>> into) { if (into == null) { into = newMap(); } for (final String key : map.keyArray()) { into.put(Integer.parseInt(key), map.get(key)); } return into; }
@Override public List<IntTo<X>> asList() { final List<IntTo<X>> list = newList(); final String[] keys = map.keyArray(); Arrays.sort(keys); for (final String key : keys) { list.add(map.get(key)); } return list; }
@Override public boolean findRemove(final IntTo<X> value, final boolean all) { if (value == null) { return false; } boolean success = false; final String[] keys = map.keyArray(); main: for (int i = keys.length; i-->0;) { final String key = keys[i]; final IntTo<X> item = map.get(key); if (item.size() == value.size()) { for (int j = item.size(); j-->0;) { if (!equals(item.get(j), value.get(j))) { continue main; } } if (!all) { return true; } success = true; } } return success; }
@Override public int indexOf(final IntTo<X> value) { if (value == null) { return -1; } final String[] keys = map.keyArray(); main: for (int i = keys.length; i-->0;) { final String key = keys[i]; final IntTo<X> item = map.get(key); if (item.size() == value.size()) { for (int j = item.size(); j-->0;) { if (!equals(item.get(j), value.get(j))) { continue main; } } return Integer.parseInt(key); } } return -1; }
@Override @SuppressWarnings({ "rawtypes", "unchecked" }) public Collection<IntTo<X>> toCollection(Collection<IntTo<X>> into) { if (into == null) { into = newList(); } if (map instanceof StringToAbstract) { into.addAll(((StringToAbstract) map).valueSet()); } else { final String[] keys = map.keyArray(); Arrays.sort(keys); for (final String key : keys) { into.add(map.get(key)); } } return into; }
@Override public IntTo<X> pop() { updateMax(); max--; final IntTo<X> items = map.remove(Integer.toString(max)); if (items != null) { return items; } final String[] keys = map.keyArray(); Arrays.sort(keys); return map.remove(keys[keys.length-1]); }
@Override public Deque<IntTo<X>> asDeque() { final Deque<IntTo<X>> deque = newDeque(); final String[] keys = map.keyArray(); Arrays.sort(keys); for (final String key : keys) { deque.add(map.get(key)); } return deque; }
@Override public IntTo<X>[] toArray() { updateMax(); @SuppressWarnings("unchecked") final IntTo<X>[] results = new IntTo[max]; for (int i = max;i-->0;) { results[i] = map.get(String.valueOf(i)); } assert noNegatives() : "Cannot use .toArray on an IntTo.Many with negative key values: "+Arrays.asList(map.keyArray()); return results; }