diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/ids/integer')
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 |