diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/relation')
6 files changed, 59 insertions, 48 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java b/src/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java index 9d9ad672..4c25405b 100644 --- a/src/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java +++ b/src/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java @@ -26,10 +26,10 @@ package de.lmu.ifi.dbs.elki.database.relation; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.data.type.TypeUtil; import de.lmu.ifi.dbs.elki.database.Database; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +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.DBIDs; import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; /** * Representation adapter that uses toString() to produce a string @@ -59,17 +59,17 @@ public class ConvertToStringView extends AbstractHierarchicalResult implements R } @Override - public String get(DBID id) { + public String get(DBIDRef id) { return existing.get(id).toString(); } @Override - public void set(DBID id, String val) { + public void set(DBIDRef id, String val) { throw new UnsupportedOperationException("Covnersion representations are not writable!"); } @Override - public void delete(DBID id) { + public void delete(DBIDRef id) { throw new UnsupportedOperationException("Covnersion representations are not writable!"); } @@ -79,7 +79,7 @@ public class ConvertToStringView extends AbstractHierarchicalResult implements R } @Override - public IterableIterator<DBID> iterDBIDs() { + public DBIDIter iterDBIDs() { return existing.iterDBIDs(); } diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java b/src/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java index 62a6fd36..4898c518 100644 --- a/src/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java +++ b/src/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java @@ -28,11 +28,11 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil; import de.lmu.ifi.dbs.elki.database.Database; import de.lmu.ifi.dbs.elki.database.UpdatableDatabase; import de.lmu.ifi.dbs.elki.database.ids.DBID; +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.DBIDs; import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableUtil; /** * Pseudo-representation that is the object ID itself. @@ -68,20 +68,21 @@ public class DBIDView extends AbstractHierarchicalResult implements Relation<DBI } @Override - public DBID get(DBID id) { + public DBID get(DBIDRef id) { assert (ids.contains(id)); - return id; + return id.getDBID(); } @Override - public void set(DBID id, DBID val) { + public void set(DBIDRef id, DBID val) { throw new UnsupportedOperationException("DBIDs cannot be changed."); } @Override - public void delete(DBID id) { + public void delete(DBIDRef id) { if(database instanceof UpdatableDatabase) { - ((UpdatableDatabase) database).delete(id); + // TODO: skip getDBID() + ((UpdatableDatabase) database).delete(id.getDBID()); } else { throw new UnsupportedOperationException("Deletions are not supported."); @@ -99,8 +100,8 @@ public class DBIDView extends AbstractHierarchicalResult implements Relation<DBI } @Override - public IterableIterator<DBID> iterDBIDs() { - return IterableUtil.fromIterable(ids); + public DBIDIter iterDBIDs() { + return ids.iter(); } @Override diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java b/src/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java index af65e84d..2d090e99 100644 --- a/src/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java +++ b/src/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java @@ -29,13 +29,12 @@ import de.lmu.ifi.dbs.elki.database.datastore.DataStore; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; import de.lmu.ifi.dbs.elki.database.datastore.WritableDataStore; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +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.DBIDs; import de.lmu.ifi.dbs.elki.database.ids.StaticDBIDs; import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableUtil; /** * Represents a single representation. This is attached to a DBIDs object, which @@ -152,12 +151,12 @@ public class MaterializedRelation<O> extends AbstractHierarchicalResult implemen } @Override - public O get(DBID id) { + public O get(DBIDRef id) { return content.get(id); } @Override - public void set(DBID id, O val) { + public void set(DBIDRef id, O val) { assert (ids.contains(id)); if(content instanceof WritableDataStore) { ((WritableDataStore<O>) content).put(id, val); @@ -170,7 +169,7 @@ public class MaterializedRelation<O> extends AbstractHierarchicalResult implemen * @param id ID to delete */ @Override - public void delete(DBID id) { + public void delete(DBIDRef id) { assert (!ids.contains(id)); if(content instanceof WritableDataStore) { ((WritableDataStore<O>) content).delete(id); @@ -183,8 +182,8 @@ public class MaterializedRelation<O> extends AbstractHierarchicalResult implemen } @Override - public IterableIterator<DBID> iterDBIDs() { - return IterableUtil.fromIterable(ids); + public DBIDIter iterDBIDs() { + return ids.iter(); } @Override diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java b/src/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java index 190b15c6..8f2b8c92 100644 --- a/src/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java +++ b/src/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java @@ -3,10 +3,10 @@ package de.lmu.ifi.dbs.elki.database.relation; import de.lmu.ifi.dbs.elki.data.projection.Projection; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.database.Database; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +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.DBIDs; import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; /* This file is part of ELKI: @@ -78,17 +78,17 @@ public class ProjectedView<IN, OUT> extends AbstractHierarchicalResult implement } @Override - public OUT get(DBID id) { + public OUT get(DBIDRef id) { return projection.project(inner.get(id)); } @Override - public void set(DBID id, OUT val) { + public void set(DBIDRef id, OUT val) { throw new UnsupportedOperationException("Projections are read-only."); } @Override - public void delete(DBID id) { + public void delete(DBIDRef id) { inner.delete(id); } @@ -103,7 +103,7 @@ public class ProjectedView<IN, OUT> extends AbstractHierarchicalResult implement } @Override - public IterableIterator<DBID> iterDBIDs() { + public DBIDIter iterDBIDs() { return inner.iterDBIDs(); } diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java b/src/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java index 1ae761f3..9937c8ee 100644 --- a/src/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java +++ b/src/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java @@ -25,12 +25,11 @@ package de.lmu.ifi.dbs.elki.database.relation; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.database.Database; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +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.DBIDs; import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableUtil; /** * A virtual partitioning of the database. For the accepted DBIDs, access is @@ -87,19 +86,19 @@ public class ProxyView<O> extends AbstractHierarchicalResult implements Relation } @Override - public O get(DBID id) { + public O get(DBIDRef id) { assert (idview.contains(id)) : "Accessing object not included in view."; return inner.get(id); } - + @Override - public void set(DBID id, O val) { + public void set(DBIDRef id, O val) { assert (idview.contains(id)) : "Accessing object not included in view."; inner.set(id, val); } @Override - public void delete(DBID id) { + public void delete(DBIDRef id) { throw new UnsupportedOperationException("Semantics of 'delete-from-virtual-partition' are not uniquely defined. Delete from IDs or from underlying data, please!"); } @@ -109,8 +108,8 @@ public class ProxyView<O> extends AbstractHierarchicalResult implements Relation } @Override - public IterableIterator<DBID> iterDBIDs() { - return IterableUtil.fromIterable(idview); + public DBIDIter iterDBIDs() { + return idview.iter(); } @Override diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/Relation.java b/src/de/lmu/ifi/dbs/elki/database/relation/Relation.java index ebe1be3c..4969ad50 100644 --- a/src/de/lmu/ifi/dbs/elki/database/relation/Relation.java +++ b/src/de/lmu/ifi/dbs/elki/database/relation/Relation.java @@ -25,17 +25,19 @@ package de.lmu.ifi.dbs.elki.database.relation; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.database.Database; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +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.DBIDs; import de.lmu.ifi.dbs.elki.database.query.DatabaseQuery; import de.lmu.ifi.dbs.elki.result.HierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; /** * An object representation from a database * * @author Erich Schubert - * + * + * @apiviz.uses DBIDRef + * * @param <O> Object type */ public interface Relation<O> extends DatabaseQuery, HierarchicalResult { @@ -47,15 +49,15 @@ public interface Relation<O> extends DatabaseQuery, HierarchicalResult { * @return Database */ public Database getDatabase(); - + /** * Get the representation of an object. * * @param id Object ID * @return object instance */ - public O get(DBID id); - + public O get(DBIDRef id); + /** * Set an object representation. * @@ -63,14 +65,14 @@ public interface Relation<O> extends DatabaseQuery, HierarchicalResult { * @param val Value */ // TODO: remove / move to a writable API? - public void set(DBID id, O val); + public void set(DBIDRef id, O val); /** * Delete an objects values. * * @param id ID to delete */ - public void delete(DBID id); + public void delete(DBIDRef id); /** * Get the data type of this representation @@ -78,7 +80,7 @@ public interface Relation<O> extends DatabaseQuery, HierarchicalResult { * @return Data type */ public SimpleTypeInformation<O> getDataTypeInformation(); - + /** * Get the IDs the query is defined for. * @@ -89,9 +91,19 @@ public interface Relation<O> extends DatabaseQuery, HierarchicalResult { /** * Get an iterator access to the DBIDs. * + * To iterate over all IDs, use the following code fragment: + * + * <pre> + * {@code + * for(DBIDIter iter = relation.iterDBIDs(); iter.valid(); iter.advance()) { + * DBID id = iter.getDBID(); + * } + * } + * </pre> + * * @return iterator for the DBIDs. */ - public IterableIterator<DBID> iterDBIDs(); + public DBIDIter iterDBIDs(); /** * Get the number of DBIDs. |