Synced first part of the next update

This commit is contained in:
2026-05-11 00:20:50 +02:00
parent 2a2d9e8d95
commit 29ddc55947
794 changed files with 65099 additions and 16962 deletions
@@ -262,7 +262,7 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
@Override
public boolean moveToFirst(KEY_TYPE o) {
if(isEmpty() || KEY_EQUALS(FIRST_KEY(), o)) return false;
if(isEmpty() || KEY_EQUALS(GET_FIRST_KEY(), o)) return false;
if(KEY_EQUALS_NULL(o)) {
if(containsNull) {
moveToFirstIndex(nullIndex);
@@ -284,7 +284,7 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
@Override
public boolean moveToLast(KEY_TYPE o) {
if(isEmpty() || KEY_EQUALS(LAST_KEY(), o)) return false;
if(isEmpty() || KEY_EQUALS(GET_LAST_KEY(), o)) return false;
if(KEY_EQUALS_NULL(o)) {
if(containsNull) {
moveToLastIndex(nullIndex);
@@ -341,13 +341,13 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
}
@Override
public KEY_TYPE FIRST_KEY() {
public KEY_TYPE GET_FIRST_KEY() {
if(size == 0) throw new NoSuchElementException();
return keys[firstIndex];
}
@Override
public KEY_TYPE POLL_FIRST_KEY() {
public KEY_TYPE REMOVE_FIRST_KEY() {
if(size == 0) throw new NoSuchElementException();
int pos = firstIndex;
onNodeRemoved(pos);
@@ -363,13 +363,13 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
}
@Override
public KEY_TYPE LAST_KEY() {
public KEY_TYPE GET_LAST_KEY() {
if(size == 0) throw new NoSuchElementException();
return keys[lastIndex];
}
@Override
public KEY_TYPE POLL_LAST_KEY() {
public KEY_TYPE REMOVE_LAST_KEY() {
if(size == 0) throw new NoSuchElementException();
int pos = lastIndex;
onNodeRemoved(pos);
@@ -668,7 +668,12 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
@Override
public LIST_ITERATOR KEY_GENERIC_TYPE iterator() {
return new SetIterator();
return new SetIterator(true);
}
@Override
public LIST_ITERATOR KEY_GENERIC_TYPE reverseIterator() {
return new SetIterator(false);
}
@Override
@@ -693,16 +698,20 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
}
private class SetIterator implements LIST_ITERATOR KEY_GENERIC_TYPE {
boolean forward;
int previous = -1;
int next = -1;
int current = -1;
int index = 0;
int index = -1;
SetIterator() {
next = firstIndex;
SetIterator(boolean start) {
this.forward = start;
if(start) next = firstIndex;
else previous = lastIndex;
}
SetIterator(KEY_TYPE from) {
this.forward = true;
if(KEY_EQUALS_NULL(from)) {
if(containsNull) {
next = (int) links[nullIndex];
@@ -731,48 +740,60 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
@Override
public int skip(int amount) {
int result = 0;
while(next != -1 && result != amount) {
current = previous = next;
next = (int)(links[current]);
result++;
}
int result = forward ? moveForward(amount) : moveBackwards(amount);
if(index >= 0) index+=result;
return result;
}
@Override
public int back(int amount) {
int result = forward ? moveBackwards(amount) : moveForward(amount);
if(index >= 0) index-=result;
return result;
}
private int moveForward(int amount) {
int result = 0;
while(next != -1 && result != amount) {
current = previous = next;
next = (int)(links[current]);
result++;
}
return result;
}
private int moveBackwards(int amount) {
int result = 0;
while(previous != -1 && result != amount) {
current = next = previous;
previous = (int)(links[current] >> 32);
result++;
}
if(index >= 0) index-=result;
return result;
}
@Override
public boolean hasNext() {
return next != -1;
return (forward ? next : previous) != -1;
}
@Override
public boolean hasPrevious() {
return previous != -1;
return (forward ? previous : next) != -1;
}
@Override
public int nextIndex() {
ensureIndexKnown();
return index;
if(forward) return index;
return size - index;
}
@Override
public int previousIndex() {
ensureIndexKnown();
return index - 1;
if(forward) return index-1;
return (size - index)-1;
}
@Override
@@ -821,8 +842,8 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
@Override
public KEY_TYPE PREVIOUS() {
if(!hasPrevious()) throw new NoSuchElementException();
current = next = previous;
previous = (int)(links[current] >> 32);
if(forward) moveBackwards();
else moveForwards();
if(index >= 0) index--;
return keys[current];
}
@@ -830,12 +851,22 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
@Override
public KEY_TYPE NEXT() {
if(!hasNext()) throw new NoSuchElementException();
current = previous = next;
next = (int)(links[current]);
if(forward) moveForwards();
else moveBackwards();
if(index >= 0) index++;
return keys[current];
}
private void moveBackwards() {
current = next = previous;
previous = (int)(links[current] >> 32);
}
private void moveForwards() {
current = previous = next;
next = (int)(links[current]);
}
private void ensureIndexKnown() {
if(index == -1) {
if(previous == -1) {