package gtPlusPlus.api.objects.data; import java.util.*; public class ReverseAutoMap extends AutoMap { /** * The Internal Map */ private Map mInternalMapReverseLookup = new HashMap(); /** * The Internal ID */ private int mInternalID = 0; private static final long serialVersionUID = 3771412318075131790L; @Override public Iterator iterator() { return values().iterator(); } public synchronized boolean setValue(N object){ int mOriginalID = this.mInternalID; put(object); if (this.mInternalMap.get(mOriginalID).equals(object) || mOriginalID > this.mInternalID){ return true; } else { return false; } } @Override public synchronized N put(N object){ return set(object); } @Override public synchronized N set(N object){ int newID = getNextFreeMapID(); mInternalMapReverseLookup.put(object, newID); return mInternalMap.put(newID, object); } public synchronized int putToInternalMap(N object){ return setInternalMap(object); } public synchronized int setInternalMap(N object){ int newID = getNextFreeMapID(); mInternalMap.put(newID, object); mInternalMapReverseLookup.put(object, newID); return newID; } public synchronized boolean injectCleanDataToAutoMap(Integer g, N object){ if (!mInternalMap.containsKey(g) && !mInternalMapReverseLookup.containsKey(object)) { int a1 = 0, a2 = 0, a11 = 0, a22 = 0; a1 = mInternalMap.size(); a2 = mInternalMapReverseLookup.size(); a11 = a1; a22 = a2; mInternalMap.put(g, object); a1 = mInternalMap.size(); mInternalMapReverseLookup.put(object, g); a2 = mInternalMapReverseLookup.size(); if (a1 > a11 && a2 > a22) return true; } return false; } public synchronized boolean injectDataToAutoMap(Integer g, N object){ int a1 = 0, a2 = 0, a11 = 0, a22 = 0; a1 = mInternalMap.size(); a2 = mInternalMapReverseLookup.size(); a11 = a1; a22 = a2; mInternalMap.put(g, object); a1 = mInternalMap.size(); mInternalMapReverseLookup.put(object, g); a2 = mInternalMapReverseLookup.size(); if (a1 > a11 && a2 > a22) return true; return false; } private boolean raiseInternalID() { int mOld = mInternalID; mInternalID++; return mInternalID > mOld; } public synchronized int getNextFreeMapID() { if (raiseInternalID()) { return mInternalID; } return Short.MIN_VALUE; } @Override public synchronized N get(int id){ return mInternalMap.get(id); } public synchronized int get(N key) { return mInternalMapReverseLookup.get(key); } @Override public synchronized Collection values(){ return mInternalMap.values(); } public synchronized Collection keys(){ return mInternalMapReverseLookup.values(); } @Override public synchronized int size(){ return mInternalMap.size(); } @Override public synchronized int hashCode(){ return mInternalMap.hashCode()+mInternalMapReverseLookup.hashCode(); } @Override public synchronized boolean containsKey(int key){ return mInternalMap.containsKey(key); } @Override public synchronized boolean containsValue(N value){ return mInternalMap.containsValue(value); } public synchronized boolean containsKey(N key){ return mInternalMapReverseLookup.containsKey(key); } public synchronized boolean containsValue(int value){ return mInternalMapReverseLookup.containsValue(value); } @Override public synchronized boolean isEmpty(){ return mInternalMap.isEmpty() && mInternalMapReverseLookup.isEmpty(); } @Override public synchronized void clear(){ this.mInternalID = 0; this.mInternalMap.clear(); this.mInternalMapReverseLookup.clear(); return; } @Override public synchronized N[] toArray() { Collection col = this.mInternalMap.values(); @SuppressWarnings("unchecked") N[] val = (N[]) col.toArray(); return val; } public synchronized Integer[] toArrayInternalMap() { Collection col = this.mInternalMapReverseLookup.values(); Integer[] val = col.toArray(new Integer[col.size()]); return val; } }