153 lines
3.4 KiB
Plaintext
153 lines
3.4 KiB
Plaintext
package speiger.src.collections.PACKAGE.sets;
|
|
|
|
#if TYPE_OBJECT
|
|
import java.util.Objects;
|
|
#endif
|
|
import java.util.Set;
|
|
|
|
import speiger.src.collections.PACKAGE.collections.ABSTRACT_COLLECTION;
|
|
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
|
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
|
|
|
/**
|
|
* Abstract Type Specific Set that reduces boxing/unboxing
|
|
* @Type(T)
|
|
*/
|
|
public abstract class ABSTRACT_SET KEY_GENERIC_TYPE extends ABSTRACT_COLLECTION KEY_GENERIC_TYPE implements SET KEY_GENERIC_TYPE
|
|
{
|
|
#if TYPE_OBJECT
|
|
@Override
|
|
public KEY_TYPE addOrGet(KEY_TYPE o) { throw new UnsupportedOperationException(); }
|
|
|
|
#endif
|
|
@Override
|
|
public abstract ITERATOR KEY_GENERIC_TYPE iterator();
|
|
@Override
|
|
public ABSTRACT_SET KEY_GENERIC_TYPE copy() { throw new UnsupportedOperationException(); }
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
int hashCode = 0;
|
|
ITERATOR KEY_GENERIC_TYPE i = iterator();
|
|
while(i.hasNext())
|
|
hashCode += KEY_TO_HASH(i.NEXT());
|
|
return hashCode;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (o == this)
|
|
return true;
|
|
if (!(o instanceof Set))
|
|
return false;
|
|
Set<?> l = (Set<?>)o;
|
|
if(l.size() != size()) return false;
|
|
try {
|
|
return containsAll(l);
|
|
} catch (ClassCastException | NullPointerException unused) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#if ORDERED_SET_FEATURE
|
|
public static class REVERSED_ORDERED_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE implements ORDERED_SET KEY_GENERIC_TYPE {
|
|
protected ORDERED_SET KEY_GENERIC_TYPE set;
|
|
|
|
public REVERSED_ORDERED_SET(ORDERED_SET KEY_GENERIC_TYPE set) {
|
|
this.set = set;
|
|
}
|
|
|
|
@Override
|
|
public REVERSED_ORDERED_SET KEY_GENERIC_TYPE copy() { throw new UnsupportedOperationException(); }
|
|
@Override
|
|
public BI_ITERATOR KEY_GENERIC_TYPE iterator(KEY_TYPE fromElement) {
|
|
return set.iterator(fromElement);
|
|
}
|
|
|
|
@Override
|
|
public BI_ITERATOR KEY_GENERIC_TYPE iterator() {
|
|
return set.reverseIterator();
|
|
}
|
|
|
|
@Override
|
|
public BI_ITERATOR KEY_GENERIC_TYPE reverseIterator() {
|
|
return set.iterator();
|
|
}
|
|
|
|
@Override
|
|
public void addFirst(KEY_TYPE o) {
|
|
set.addLast(o);
|
|
}
|
|
|
|
@Override
|
|
public void addLast(KEY_TYPE o) {
|
|
set.addFirst(o);
|
|
}
|
|
|
|
@Override
|
|
#if !TYPE_OBJECT
|
|
public boolean remove(KEY_TYPE o) {
|
|
#else
|
|
public boolean remove(Object o) {
|
|
#endif
|
|
return set.remove(o);
|
|
}
|
|
|
|
@Override
|
|
public boolean add(KEY_TYPE o) {
|
|
return set.add(o);
|
|
}
|
|
|
|
@Override
|
|
public boolean addAndMoveToFirst(KEY_TYPE o) {
|
|
return set.addAndMoveToLast(o);
|
|
}
|
|
|
|
@Override
|
|
public boolean addAndMoveToLast(KEY_TYPE o) {
|
|
return set.addAndMoveToFirst(o);
|
|
}
|
|
|
|
@Override
|
|
public boolean moveToFirst(KEY_TYPE o) {
|
|
return set.moveToLast(o);
|
|
}
|
|
|
|
@Override
|
|
public boolean moveToLast(KEY_TYPE o) {
|
|
return set.moveToFirst(o);
|
|
}
|
|
|
|
@Override
|
|
public KEY_TYPE GET_FIRST_KEY() {
|
|
return set.GET_LAST_KEY();
|
|
}
|
|
|
|
@Override
|
|
public KEY_TYPE REMOVE_FIRST_KEY() {
|
|
return set.REMOVE_LAST_KEY();
|
|
}
|
|
|
|
@Override
|
|
public KEY_TYPE GET_LAST_KEY() {
|
|
return set.GET_FIRST_KEY();
|
|
}
|
|
|
|
@Override
|
|
public KEY_TYPE REMOVE_LAST_KEY() {
|
|
return set.REMOVE_FIRST_KEY();
|
|
}
|
|
|
|
@Override
|
|
public ORDERED_SET KEY_GENERIC_TYPE reversed() {
|
|
return set;
|
|
}
|
|
|
|
@Override
|
|
public int size() {
|
|
return set.size();
|
|
}
|
|
}
|
|
#endif
|
|
}
|