summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/ids/generic
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/ids/generic')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/DBIDIterAdapter.java30
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericArrayModifiableDBIDs.java28
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericHashSetModifiableDBIDs.java27
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java35
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/MergedDBIDs.java3
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java101
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java4
7 files changed, 196 insertions, 32 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/DBIDIterAdapter.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/DBIDIterAdapter.java
index c517ea9f..91e307c2 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/generic/DBIDIterAdapter.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/DBIDIterAdapter.java
@@ -1,10 +1,5 @@
package de.lmu.ifi.dbs.elki.database.ids.generic;
-import java.util.Iterator;
-
-import de.lmu.ifi.dbs.elki.database.ids.DBID;
-import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
-
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -28,12 +23,18 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+import java.util.Iterator;
+
+import de.lmu.ifi.dbs.elki.database.ids.DBID;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDMIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+
/**
* Iterator for classic collections.
*
* @author Erich Schubert
*/
-public class DBIDIterAdapter implements DBIDIter {
+public class DBIDIterAdapter implements DBIDMIter {
/**
* Current DBID
*/
@@ -79,4 +80,21 @@ public class DBIDIterAdapter implements DBIDIter {
public DBID getDBID() {
return cur;
}
+
+ @Override
+ public void remove() {
+ iter.remove();
+ }
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return cur.getIntegerID() == other.getIntegerID();
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ final int thisVal = cur.getIntegerID();
+ final int anotherVal = o.getIntegerID();
+ return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
+ }
} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericArrayModifiableDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericArrayModifiableDBIDs.java
index f271180d..f02c5064 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericArrayModifiableDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericArrayModifiableDBIDs.java
@@ -30,6 +30,8 @@ import java.util.Comparator;
import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
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.DBIDMIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
/**
@@ -80,7 +82,7 @@ public class GenericArrayModifiableDBIDs extends ArrayList<DBID> implements Arra
public boolean addDBIDs(DBIDs ids) {
super.ensureCapacity(size() + ids.size());
boolean changed = false;
- for(DBID id : ids) {
+ for(DBIDIter id = ids.iter(); id.valid(); id.advance()) {
changed |= add(id);
}
return changed;
@@ -89,15 +91,20 @@ public class GenericArrayModifiableDBIDs extends ArrayList<DBID> implements Arra
@Override
public boolean removeDBIDs(DBIDs ids) {
boolean changed = false;
- for(DBID id : ids) {
+ for(DBIDIter id = ids.iter(); id.valid(); id.advance()) {
changed |= super.remove(id);
}
return changed;
}
@Override
- public boolean remove(DBID id) {
- return super.remove(id);
+ public boolean add(DBIDRef id) {
+ return add(id.getDBID());
+ }
+
+ @Override
+ public boolean remove(DBIDRef id) {
+ return super.remove(id.getDBID());
}
@Override
@@ -111,17 +118,22 @@ public class GenericArrayModifiableDBIDs extends ArrayList<DBID> implements Arra
}
@Override
- public DBIDIter iter() {
+ public DBIDMIter iter() {
return new DBIDIterAdapter(iterator());
}
@Override
- public int binarySearch(DBID key) {
- return Collections.binarySearch(this, key);
+ public int binarySearch(DBIDRef key) {
+ return Collections.binarySearch(this, key.getDBID());
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
return super.contains(o);
}
+
+ @Override
+ public void swap(int a, int b) {
+ set(a, set(b, get(a)));
+ }
} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericHashSetModifiableDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericHashSetModifiableDBIDs.java
index 31a8602c..6eadf0b1 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericHashSetModifiableDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/GenericHashSetModifiableDBIDs.java
@@ -24,10 +24,11 @@ package de.lmu.ifi.dbs.elki.database.ids.generic;
*/
import java.util.HashSet;
-import java.util.Iterator;
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.DBIDMIter;
+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.ids.HashSetModifiableDBIDs;
@@ -72,7 +73,7 @@ public class GenericHashSetModifiableDBIDs extends HashSet<DBID> implements Hash
*/
public GenericHashSetModifiableDBIDs(DBIDs c) {
super(c.size());
- for(DBID id : c) {
+ for(DBIDIter id = c.iter(); id.valid(); id.advance()) {
add(id);
}
}
@@ -80,7 +81,7 @@ public class GenericHashSetModifiableDBIDs extends HashSet<DBID> implements Hash
@Override
public boolean addDBIDs(DBIDs ids) {
boolean changed = false;
- for(DBID id : ids) {
+ for(DBIDIter id = ids.iter(); id.valid(); id.advance()) {
changed |= add(id);
}
return changed;
@@ -89,23 +90,27 @@ public class GenericHashSetModifiableDBIDs extends HashSet<DBID> implements Hash
@Override
public boolean removeDBIDs(DBIDs ids) {
boolean changed = false;
- for(DBID id : ids) {
+ for(DBIDIter id = ids.iter(); id.valid(); id.advance()) {
changed |= super.remove(id);
}
return changed;
}
@Override
- public boolean remove(DBID id) {
- return super.remove(id);
+ public boolean add(DBIDRef id) {
+ return super.add(id.getDBID());
+ }
+
+ @Override
+ public boolean remove(DBIDRef id) {
+ return super.remove(id.getDBID());
}
@Override
public boolean retainAll(DBIDs ids) {
boolean modified = false;
- Iterator<DBID> it = iterator();
- while(it.hasNext()) {
- if(!ids.contains(it.next())) {
+ for(DBIDMIter it = iter(); it.valid(); it.advance()) {
+ if(!ids.contains(it)) {
it.remove();
modified = true;
}
@@ -114,12 +119,12 @@ public class GenericHashSetModifiableDBIDs extends HashSet<DBID> implements Hash
}
@Override
- public DBIDIter iter() {
+ public DBIDMIter iter() {
return new DBIDIterAdapter(iterator());
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
return super.contains(o);
}
} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java
index 67c84290..13a6cc21 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java
@@ -29,6 +29,7 @@ import java.util.Iterator;
import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
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;
/**
@@ -36,7 +37,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
*
* @author Erich Schubert
*
- * @apiviz.uses de.lmu.ifi.dbs.elki.database.ids.DBIDs
+ * @apiviz.uses DBIDs
*/
public class MaskedDBIDs implements DBIDs {
/**
@@ -99,10 +100,10 @@ public class MaskedDBIDs implements DBIDs {
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
// TODO: optimize.
for(DBID id : this) {
- if(id.equals(o)) {
+ if(id.sameDBID(o)) {
return true;
}
}
@@ -191,6 +192,18 @@ public class MaskedDBIDs implements DBIDs {
public DBID getDBID() {
return data.get(pos);
}
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return getIntegerID() == other.getIntegerID();
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ final int thisVal = getIntegerID();
+ final int anotherVal = o.getIntegerID();
+ return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
+ }
}
/**
@@ -253,7 +266,7 @@ public class MaskedDBIDs implements DBIDs {
@Override
public boolean valid() {
- return pos >= 0;
+ return (pos >= 0) && (pos < data.size());
}
@Override
@@ -270,5 +283,17 @@ public class MaskedDBIDs implements DBIDs {
public DBID getDBID() {
return data.get(pos);
}
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return getIntegerID() == other.getIntegerID();
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ final int thisVal = getIntegerID();
+ final int anotherVal = o.getIntegerID();
+ return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
+ }
}
-}
+} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/MergedDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/MergedDBIDs.java
index 97743867..16d83a56 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/generic/MergedDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/MergedDBIDs.java
@@ -27,6 +27,7 @@ import java.util.Iterator;
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.utilities.exceptions.AbortException;
@@ -79,7 +80,7 @@ public class MergedDBIDs implements DBIDs {
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
for(DBIDs child : childs) {
if(child.contains(o)) {
return true;
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java
new file mode 100644
index 00000000..35b092c2
--- /dev/null
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java
@@ -0,0 +1,101 @@
+package de.lmu.ifi.dbs.elki.database.ids.generic;
+
+/*
+ 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 <http://www.gnu.org/licenses/>.
+ */
+
+import java.util.Iterator;
+
+import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayStaticDBIDs;
+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.utilities.iterator.UnmodifiableIterator;
+
+/**
+ * Unmodifiable wrapper for DBIDs.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.uses de.lmu.ifi.dbs.elki.database.ids.DBIDs
+ */
+public class UnmodifiableArrayDBIDs implements ArrayStaticDBIDs {
+ /**
+ * The DBIDs we wrap.
+ */
+ final private ArrayDBIDs inner;
+
+ /**
+ * Constructor.
+ *
+ * @param inner Inner DBID collection.
+ */
+ public UnmodifiableArrayDBIDs(ArrayDBIDs inner) {
+ super();
+ this.inner = inner;
+ }
+
+ @Override
+ public boolean contains(DBIDRef o) {
+ return inner.contains(o);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return inner.isEmpty();
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public Iterator<DBID> iterator() {
+ return new UnmodifiableIterator<DBID>(inner.iterator());
+ }
+
+ @Override
+ public DBIDIter iter() {
+ return inner.iter();
+ }
+
+ @Override
+ public int size() {
+ return inner.size();
+ }
+
+ /**
+ * Returns a string representation of the inner DBID collection.
+ */
+ @Override
+ public String toString() {
+ return inner.toString();
+ }
+
+ @Override
+ public DBID get(int i) {
+ return inner.get(i);
+ }
+
+ @Override
+ public int binarySearch(DBIDRef key) {
+ return inner.binarySearch(key);
+ }
+} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java
index bd68e2fb..682b2e4b 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java
@@ -27,6 +27,7 @@ import java.util.Iterator;
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.ids.StaticDBIDs;
import de.lmu.ifi.dbs.elki.utilities.iterator.UnmodifiableIterator;
@@ -55,7 +56,7 @@ public class UnmodifiableDBIDs implements StaticDBIDs {
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
return inner.contains(o);
}
@@ -64,6 +65,7 @@ public class UnmodifiableDBIDs implements StaticDBIDs {
return inner.isEmpty();
}
+ @SuppressWarnings("deprecation")
@Override
public Iterator<DBID> iterator() {
return new UnmodifiableIterator<DBID>(inner.iterator());