We don't actually want an inner class here with its outer this pointer and
ability to implicitly call methods on its outer class. We just need a static wrapper. git-svn-id: https://samskivert.googlecode.com/svn/trunk@2738 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -82,31 +82,7 @@ public class WeakObserverList<T> extends AbstractList<T>
|
|||||||
*/
|
*/
|
||||||
public WeakObserverList (int notifyPolicy, boolean allowDups)
|
public WeakObserverList (int notifyPolicy, boolean allowDups)
|
||||||
{
|
{
|
||||||
// dereference the elements when searching for a value
|
_wrappedList = new WrappedList<T>(notifyPolicy, allowDups);
|
||||||
_wrappedList = new ObserverList<WeakReference<T>>(notifyPolicy, allowDups) {
|
|
||||||
@Override public int indexOf (Object element) {
|
|
||||||
@SuppressWarnings("unchecked") WeakReference<T> ref =
|
|
||||||
(WeakReference<T>)element;
|
|
||||||
T value = ref.get();
|
|
||||||
for (int ii = 0, nn = size(); ii < nn; ii++) {
|
|
||||||
if (value == get(ii).get()) {
|
|
||||||
return ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
@Override public int lastIndexOf (Object element) {
|
|
||||||
@SuppressWarnings("unchecked") WeakReference<T> ref =
|
|
||||||
(WeakReference<T>)element;
|
|
||||||
T value = ref.get();
|
|
||||||
for (int ii = size() - 1; ii >= 0; ii--) {
|
|
||||||
if (value == get(ii).get()) {
|
|
||||||
return ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // documentation inherited
|
@Override // documentation inherited
|
||||||
@@ -215,8 +191,40 @@ public class WeakObserverList<T> extends AbstractList<T>
|
|||||||
protected ObserverOp<T> _op;
|
protected ObserverOp<T> _op;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ObserverList extension that dereferences elements when searching for a value.
|
||||||
|
*/
|
||||||
|
protected static class WrappedList<T> extends ObserverList<WeakReference<T>>
|
||||||
|
{
|
||||||
|
public WrappedList (int notifyPolicy, boolean allowDups) {
|
||||||
|
super(notifyPolicy, allowDups);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public int indexOf (Object element) {
|
||||||
|
@SuppressWarnings("unchecked") WeakReference<T> ref = (WeakReference<T>)element;
|
||||||
|
T value = ref.get();
|
||||||
|
for (int ii = 0, nn = size(); ii < nn; ii++) {
|
||||||
|
if (value == get(ii).get()) {
|
||||||
|
return ii;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public int lastIndexOf (Object element) {
|
||||||
|
@SuppressWarnings("unchecked") WeakReference<T> ref = (WeakReference<T>)element;
|
||||||
|
T value = ref.get();
|
||||||
|
for (int ii = size() - 1; ii >= 0; ii--) {
|
||||||
|
if (value == get(ii).get()) {
|
||||||
|
return ii;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** The wrapped list. */
|
/** The wrapped list. */
|
||||||
protected ObserverList<WeakReference<T>> _wrappedList;
|
protected WrappedList<T> _wrappedList;
|
||||||
|
|
||||||
/** The wrapper op. */
|
/** The wrapper op. */
|
||||||
protected DerefOp<T> _derefOp = new DerefOp<T>();
|
protected DerefOp<T> _derefOp = new DerefOp<T>();
|
||||||
|
|||||||
Reference in New Issue
Block a user