/** * Add an object with an associated value. * @param o The object (becomes weak reference). * @param val The value. */ public boolean addEntry(Object o, Runnable action) { if(o==null) throw new NullPointerException("Null elements not supported."); entries.add(new WeakEntry(o, action, this)); return true; }
/** * Get the weak external id. */ public OAVExternalObjectId getWeakExternalId() { OAVExternalObjectId ret = extid==null? null: (OAVExternalObjectId)extid.get(); if(ret==null) { ret = new OAVExternalObjectId(this); extid = new WeakEntry(ret, this, queue); } return ret; }
/** * Get the weak external id. */ public OAVExternalObjectId getWeakExternalId() { OAVExternalObjectId ret = extid==null? null: (OAVExternalObjectId)extid.get(); if(ret==null) { ret = new OAVExternalObjectId(this); extid = new WeakEntry(ret, this, queue); } return ret; }
/** * Remove an entry. */ public Runnable removeEntry(Object obj) { if(obj==null) throw new IllegalArgumentException("Must not be null."); // todo: can this be done more efficiently? WeakEntry find = new WeakEntry(obj, null); WeakEntry ret = null; for(int i=0; i<entries.size(); i++) { Object tmp = entries.get(i); if(tmp.equals(find)) { ret = (WeakEntry)tmp; entries.remove(i); break; } } //entries.remove(ret); return ret!=null? (Runnable)ret.getArgument(): null; }
/** * Add value for key. */ public V put(final K key, V value) { expungeStaleEntries(); WeakEntry<V> ret; if(value!=null) { WeakEntry<V> we = new WeakEntry<V>(value, key, queue); ret = contents.put(key, we); } else { ret = contents.put(key, null); } return ret!=null ? ret.get() : null; }