package com.limegroup.gnutella.filters;
import org.limewire.io.IP;
import org.limewire.io.NetworkInstanceUtils;
/**
* A view over several IPLists.
*/
public class MultiIPList extends IPList {
/** The lists that this view represents */
private final IPList [] lists;
public MultiIPList(IPList... lists) {
this.lists = lists;
}
@Override
public synchronized void add(IP ip) {
throw new UnsupportedOperationException();
}
@Override
public synchronized boolean contains(IP lookup) {
for (IPList ipl : lists) {
if (ipl.contains(lookup))
return true;
}
return false;
}
@Override
public synchronized boolean isEmpty() {
for (IPList ipl : lists) {
if (!ipl.isEmpty())
return false;
}
return true;
}
@Override
public synchronized boolean isValidFilter(boolean allowPrivateIPs, NetworkInstanceUtils networkInstanceUtils) {
for (IPList ipl : lists) {
if (!ipl.isValidFilter(allowPrivateIPs, networkInstanceUtils))
return false;
}
return true;
}
@Override
public synchronized int minDistanceTo(IP lookup) {
int ret = Integer.MAX_VALUE;
for (IPList ipl : lists)
ret = Math.min(ret, ipl.minDistanceTo(lookup));
return ret;
}
@Override
public synchronized int size() {
int ret = 0;
for (IPList ipl : lists)
ret += ipl.size();
return ret;
}
}