summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/ids/integer
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/ids/integer')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java24
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java51
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java22
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java3
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java3
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayDBIDs.java38
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayModifiableDBIDs.java10
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java24
8 files changed, 151 insertions, 24 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java
index ef4aee94..90ab5a6a 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java
@@ -31,6 +31,8 @@ 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.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.logging.LoggingUtil;
/**
* Static (no modifications allowed) set of Database Object IDs.
@@ -123,6 +125,24 @@ public class IntegerArrayStaticDBIDs extends AbstractList<DBID> implements Array
return new IntegerDBID(ids[pos]);
}
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return ids[pos] == other.getIntegerID();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof DBID) {
+ LoggingUtil.warning("Programming error detected: DBIDItr.equals(DBID). Use sameDBID()!", new Throwable());
+ }
+ return super.equals(other);
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ int anotherVal = o.getIntegerID();
+ return (ids[pos] < anotherVal ? -1 : (ids[pos] == anotherVal ? 0 : 1));
+ }
}
@Override
@@ -131,7 +151,7 @@ public class IntegerArrayStaticDBIDs extends AbstractList<DBID> implements Array
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
final int oid = o.getIntegerID();
for(int i = 0; i < ids.length; i++) {
if(ids[i] == oid) {
@@ -164,7 +184,7 @@ public class IntegerArrayStaticDBIDs extends AbstractList<DBID> implements Array
}
@Override
- public int binarySearch(DBID key) {
+ public int binarySearch(DBIDRef key) {
return Arrays.binarySearch(ids, key.getIntegerID());
}
} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java
index f9e83294..66c1f980 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java
@@ -28,6 +28,8 @@ 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.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.persistent.ByteArrayUtil;
import de.lmu.ifi.dbs.elki.persistent.ByteBufferSerializer;
import de.lmu.ifi.dbs.elki.persistent.FixedSizeByteBufferSerializer;
@@ -49,7 +51,7 @@ import de.lmu.ifi.dbs.elki.persistent.FixedSizeByteBufferSerializer;
* @apiviz.composedOf DynamicSerializer
* @apiviz.composedOf StaticSerializer
*/
-class IntegerDBID implements DBID {
+final class IntegerDBID implements DBID {
/**
* The actual object ID.
*/
@@ -75,6 +77,11 @@ class IntegerDBID implements DBID {
this.id = id;
}
+ @Override
+ public DBID getDBID() {
+ return this;
+ }
+
/**
* Return the integer value of the object ID.
*
@@ -98,14 +105,29 @@ class IntegerDBID implements DBID {
@Override
public boolean equals(Object obj) {
if(!(obj instanceof IntegerDBID)) {
+ if (obj instanceof DBIDRef) {
+ LoggingUtil.warning("Programming error: DBID.equals(DBIDRef) is not well-defined. use sameDBID!", new Throwable());
+ }
return false;
}
IntegerDBID other = (IntegerDBID) obj;
return this.id == other.id;
}
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return this.id == other.getIntegerID();
+ }
@Override
- public int compareTo(DBID o) {
+ public int compareTo(DBIDRef o) {
+ int thisVal = this.id;
+ int anotherVal = o.getIntegerID();
+ return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
int thisVal = this.id;
int anotherVal = o.getIntegerID();
return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
@@ -130,7 +152,7 @@ class IntegerDBID implements DBID {
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
return o.getIntegerID() == id;
}
@@ -140,8 +162,8 @@ class IntegerDBID implements DBID {
}
@Override
- public int binarySearch(DBID key) {
- return equals(key) ? 0 : -1;
+ public int binarySearch(DBIDRef key) {
+ return (id == key.getIntegerID()) ? 0 : -1;
}
/**
@@ -207,6 +229,25 @@ class IntegerDBID implements DBID {
public boolean valid() {
return first;
}
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof DBID) {
+ LoggingUtil.warning("Programming error detected: DBIDItr.equals(DBID). Use sameDBID()!", new Throwable());
+ }
+ return super.equals(other);
+ }
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return id == other.getIntegerID();
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ int anotherVal = o.getIntegerID();
+ return (id < anotherVal ? -1 : (id == anotherVal ? 0 : 1));
+ }
}
@Override
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java
index debe39a4..cad771d9 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
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.DBIDRange;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
/**
* Representing a DBID range allocation
@@ -134,10 +135,25 @@ class IntegerDBIDRange extends AbstractList<DBID> implements DBIDRange {
return new IntegerDBID(start + pos);
}
+ @Override
+ public boolean equals(Object other) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return start + pos == other.getIntegerID();
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ int anotherVal = o.getIntegerID();
+ return (start + pos < anotherVal ? -1 : (start + pos == anotherVal ? 0 : 1));
+ }
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
int oid = o.getIntegerID();
if(oid < start) {
return false;
@@ -180,12 +196,12 @@ class IntegerDBIDRange extends AbstractList<DBID> implements DBIDRange {
* @return array offset
*/
@Override
- public int getOffset(DBID dbid) {
+ public int getOffset(DBIDRef dbid) {
return dbid.getIntegerID() - start;
}
@Override
- public int binarySearch(DBID key) {
+ public int binarySearch(DBIDRef key) {
int keyid = key.getIntegerID();
if(keyid < start) {
return -1;
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java
index 59fa34b5..8003e4ae 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
import de.lmu.ifi.dbs.elki.database.ids.DBIDFactory;
import de.lmu.ifi.dbs.elki.database.ids.DBIDPair;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
+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;
import de.lmu.ifi.dbs.elki.persistent.ByteBufferSerializer;
@@ -132,7 +133,7 @@ public class SimpleDBIDFactory implements DBIDFactory {
}
@Override
- public DBIDPair makePair(DBID first, DBID second) {
+ public DBIDPair makePair(DBIDRef first, DBIDRef second) {
return new IntegerDBIDPair(first.getIntegerID(), second.getIntegerID());
}
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java
index b38286fe..80f65f29 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
import de.lmu.ifi.dbs.elki.database.ids.DBIDFactory;
import de.lmu.ifi.dbs.elki.database.ids.DBIDPair;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
+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;
import de.lmu.ifi.dbs.elki.persistent.ByteBufferSerializer;
@@ -130,7 +131,7 @@ public class TrivialDBIDFactory implements DBIDFactory {
}
@Override
- public DBIDPair makePair(DBID first, DBID second) {
+ public DBIDPair makePair(DBIDRef first, DBIDRef second) {
return new IntegerDBIDPair(first.getIntegerID(), second.getIntegerID());
}
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayDBIDs.java
index a060c6b8..e2bfbcd5 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayDBIDs.java
@@ -29,7 +29,9 @@ 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.DBIDMIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
/**
* Abstract base class for GNU Trove array based lists.
@@ -53,7 +55,7 @@ public abstract class TroveArrayDBIDs implements ArrayDBIDs {
}
@Override
- public DBIDIter iter() {
+ public DBIDMIter iter() {
return new DBIDItr(getStore());
}
@@ -73,12 +75,12 @@ public abstract class TroveArrayDBIDs implements ArrayDBIDs {
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
return getStore().contains(o.getIntegerID());
}
@Override
- public int binarySearch(DBID key) {
+ public int binarySearch(DBIDRef key) {
return getStore().binarySearch(key.getIntegerID());
}
@@ -89,7 +91,7 @@ public abstract class TroveArrayDBIDs implements ArrayDBIDs {
*
* @apiviz.exclude
*/
- protected static class DBIDItr implements DBIDIter {
+ protected static class DBIDItr implements DBIDMIter {
/**
* Current position
*/
@@ -129,5 +131,31 @@ public abstract class TroveArrayDBIDs implements ArrayDBIDs {
public DBID getDBID() {
return new IntegerDBID(store.get(pos));
}
+
+ @Override
+ public void remove() {
+ store.removeAt(pos);
+ pos--;
+ }
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return store.get(pos) == other.getIntegerID();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof DBID) {
+ LoggingUtil.warning("Programming error detected: DBIDItr.equals(DBID). Use sameDBID()!", new Throwable());
+ }
+ return super.equals(other);
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ final int thisVal = store.get(pos);
+ 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/integer/TroveArrayModifiableDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayModifiableDBIDs.java
index abcbba14..379ea8a6 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayModifiableDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveArrayModifiableDBIDs.java
@@ -31,6 +31,7 @@ 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.DBIDRef;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
/**
@@ -96,12 +97,12 @@ class TroveArrayModifiableDBIDs extends TroveArrayDBIDs implements ArrayModifiab
}
@Override
- public boolean add(DBID e) {
+ public boolean add(DBIDRef e) {
return store.add(e.getIntegerID());
}
@Override
- public boolean remove(DBID o) {
+ public boolean remove(DBIDRef o) {
return store.remove(o.getIntegerID());
}
@@ -141,4 +142,9 @@ class TroveArrayModifiableDBIDs extends TroveArrayDBIDs implements ArrayModifiab
store.set(i, data[i].getIntegerID());
}
}
+
+ @Override
+ public void swap(int a, int b) {
+ store.set(a, store.set(b, store.get(a)));
+ }
} \ No newline at end of file
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java
index 11fe669c..12656f7b 100644
--- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java
+++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java
@@ -7,6 +7,8 @@ import gnu.trove.impl.hash.TIntHash;
import gnu.trove.set.hash.TIntHashSet;
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;
@@ -76,7 +78,7 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs {
}
@Override
- public DBIDIter iter() {
+ public DBIDMIter iter() {
return new DBIDItr(store);
}
@@ -99,12 +101,12 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs {
}
@Override
- public boolean add(DBID e) {
+ public boolean add(DBIDRef e) {
return store.add(e.getIntegerID());
}
@Override
- public boolean remove(DBID o) {
+ public boolean remove(DBIDRef o) {
return store.remove(o.getIntegerID());
}
@@ -142,7 +144,7 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs {
}
@Override
- public boolean contains(DBID o) {
+ public boolean contains(DBIDRef o) {
return store.contains(o.getIntegerID());
}
@@ -153,7 +155,7 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs {
*
* @apiviz.exclude
*/
- protected static class DBIDItr extends THashPrimitiveIterator implements DBIDIter {
+ protected static class DBIDItr extends THashPrimitiveIterator implements DBIDMIter {
/**
* The has we access
*/
@@ -189,5 +191,17 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs {
public DBID getDBID() {
return new IntegerDBID(hash._set[_index]);
}
+
+ @Override
+ public boolean sameDBID(DBIDRef other) {
+ return getIntegerID() == other.getIntegerID();
+ }
+
+ @Override
+ public int compareDBID(DBIDRef o) {
+ final int thisVal = hash._set[_index];
+ final int anotherVal = o.getIntegerID();
+ return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
+ }
}
} \ No newline at end of file