package de.lmu.ifi.dbs.elki.distance.distanceresultlist; /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import java.util.ArrayList; import de.lmu.ifi.dbs.elki.database.ids.DBIDFactory; import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.ids.DistanceDBIDPair; import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Default class to keep a list of distance-object pairs. * * @author Erich Schubert * * @param Distance type */ public class GenericDistanceDBIDList> implements ModifiableDistanceDBIDResult { /** * Actual storage. */ final ArrayList> storage; /** * Constructor. */ public GenericDistanceDBIDList() { super(); storage = new ArrayList>(); } /** * Constructor. * * @param initialCapacity Capacity */ public GenericDistanceDBIDList(int initialCapacity) { super(); storage = new ArrayList>(initialCapacity); } @Override public void add(D dist, DBIDRef id) { storage.add(DBIDFactory.FACTORY.newDistancePair(dist, id)); } /** * Add a prepared pair. * * @param pair Pair to add */ public void add(DistanceDBIDPair pair) { storage.add(pair); } @Override public void sort() { DistanceDBIDResultUtil.sortByDistance(storage); } @Override public int size() { return storage.size(); } @Override public DistanceDBIDPair get(int off) { return storage.get(off); } @Override public DistanceDBIDResultIter iter() { return new Iter(); } @Override public boolean contains(DBIDRef o) { for(DBIDIter iter = iter(); iter.valid(); iter.advance()) { if(DBIDUtil.equal(iter, o)) { return true; } } return false; } @Override public boolean isEmpty() { return size() == 0; } @Override public String toString() { return DistanceDBIDResultUtil.toString(this); } /** * Iterator class. * * @author Erich Schubert * * @apiviz.exclude */ protected class Iter implements DistanceDBIDResultIter { /** * Iterator position. */ int pos = 0; @Override public int internalGetIndex() { return get(pos).internalGetIndex(); } @Override public boolean valid() { return pos < size(); } @Override public void advance() { pos++; } @Override public D getDistance() { return get(pos).getDistance(); } @Override public DistanceDBIDPair getDistancePair() { return get(pos); } @Override public String toString() { return valid() ? getDistancePair().toString() : "null"; } } }