package mil.nga.giat.geowave.analytic.nn; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import mil.nga.giat.geowave.core.index.ByteArrayId; public class DefaultNeighborList<NNTYPE> implements NeighborList<NNTYPE> { private final Map<ByteArrayId, NNTYPE> list = new HashMap<ByteArrayId, NNTYPE>(); @Override public boolean add( final DistanceProfile<?> distanceProfile, final ByteArrayId id, final NNTYPE value ) { if (infer( id, value) == InferType.NONE) { list.put( id, value); return true; } return false; } @Override public InferType infer( final ByteArrayId id, final NNTYPE value ) { if (list.containsKey(id)) { return InferType.SKIP; } return InferType.NONE; } @Override public void clear() { list.clear(); } @Override public Iterator<Entry<ByteArrayId, NNTYPE>> iterator() { return list.entrySet().iterator(); } @Override public int size() { return list.size(); } public static class DefaultNeighborListFactory<NNTYPE> implements NeighborListFactory<NNTYPE> { @Override public NeighborList<NNTYPE> buildNeighborList( final ByteArrayId centerId, final NNTYPE center ) { return new DefaultNeighborList<NNTYPE>(); } } @Override public boolean isEmpty() { return list.isEmpty(); } public NNTYPE get( final ByteArrayId key ) { return list.get(key); } }