summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/relation
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/relation')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java12
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java19
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java15
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java12
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java17
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/Relation.java32
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.