package com.planet_ink.coffee_mud.core.collections; import java.util.*; import com.planet_ink.coffee_mud.Libraries.interfaces.MaskingLibrary; public final class PairCMList<T, K> extends CMList<Pair<T, K>> implements PairList<T, K> { private static final long serialVersionUID = -9175373328892311411L; @Override public final Pair.FirstConverter<T, K> getFirstConverter() { return new Pair.FirstConverter<T, K>(); } @Override public final Pair.SecondConverter<T, K> getSecondConverter() { return new Pair.SecondConverter<T, K>(); } @Override public final Iterator<T> firstIterator() { return new ConvertingIterator<Pair<T, K>, T>(iterator(), getFirstConverter()); } @Override public final Iterator<K> secondIterator() { return new ConvertingIterator<Pair<T, K>, K>(iterator(), getSecondConverter()); } @Override public synchronized int indexOfFirst(T t) { return indexOfFirst(t, 0); } @Override public synchronized int indexOfSecond(K k) { return indexOfSecond(k, 0); } @Override public T getFirst(int index) { return get(index).first; } @Override public K getSecond(int index) { return get(index).second; } @Override public void add(T t, K k) { add(new Pair<T, K>(t, k)); } public void addElement(T t, K k) { add(new Pair<T, K>(t, k)); } @Override public boolean containsFirst(T t) { for (final Iterator<Pair<T, K>> i = iterator(); i.hasNext();) { if ((t == null) ? i.next() == null : t.equals(i.next().first)) return true; } return false; } @Override public boolean containsSecond(K k) { for (final Iterator<Pair<T, K>> i = iterator(); i.hasNext();) { if ((k == null) ? i.next() == null : k.equals(i.next().second)) return true; } return false; } @Override public T elementAtFirst(int index) { return get(index).first; } @Override public K elementAtSecond(int index) { return get(index).second; } @Override public synchronized int indexOfFirst(T t, int index) { try { for (int i = index; i < size(); i++) { if ((t == null ? get(i).first == null : t.equals(get(i).first))) return i; } } catch (final Exception e) { } return -1; } @Override public synchronized int indexOfSecond(K k, int index) { try { for (int i = index; i < size(); i++) if ((k == null ? get(i).second == null : k.equals(get(i).second))) return i; } catch (final Exception e) { } return -1; } @Override public synchronized int lastIndexOfFirst(T t, int index) { try { for (int i = index; i >= 0; i--) if ((t == null ? get(i).first == null : t.equals(get(i).first))) return i; } catch (final Exception e) { } return -1; } @Override public synchronized int lastIndexOfSecond(K k, int index) { try { for (int i = index; i >= 0; i--) if ((k == null ? get(i).second == null : k.equals(get(i).second))) return i; } catch (final Exception e) { } return -1; } @Override public synchronized int lastIndexOfFirst(T t) { return lastIndexOfFirst(t, size() - 1); } @Override public synchronized int lastIndexOfSecond(K k) { return lastIndexOfSecond(k, size() - 1); } @Override public boolean removeFirst(T t) { Pair<T, K> pair; for (final Iterator<Pair<T, K>> i = iterator(); i.hasNext();) { pair = i.next(); if ((t == null ? pair.first == null : t.equals(pair.first))) return super.remove(pair); } return false; } @Override public boolean removeSecond(K k) { Pair<T, K> pair; for (final Iterator<Pair<T, K>> i = iterator(); i.hasNext();) { pair = i.next(); if ((k == null ? pair.second == null : k.equals(pair.second))) return super.remove(pair); } return false; } @Override public boolean removeElementFirst(T t) { return removeFirst(t); } @Override public boolean removeElementSecond(K k) { return removeSecond(k); } @Override public T[] toArrayFirst(T[] objs) { if(objs.length < size()) objs = Arrays.copyOf(objs, size()); for (int x = 0; x < size(); x++) objs[x] = getFirst(x); return objs; } @Override public K[] toArraySecond(K[] objs) { if(objs.length < size()) objs = Arrays.copyOf(objs, size()); for (int x = 0; x < size(); x++) objs[x] = getSecond(x); return objs; } }