JPP: Small fixes in collection2 to think abount X0 naming
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 1m4s

This commit is contained in:
Willem Cazander 2026-02-03 11:08:20 +01:00
parent b8855069df
commit 1a29d40fce
11 changed files with 229 additions and 189 deletions

View file

@ -37,14 +37,10 @@ import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAu
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天") @DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class BabelTest { public class BabelTest {
// ᒢᣘᐧᐧ // jppa = nether + land + collection2 // ᒢᣘᐧᐧ // jpp0 = nether + land + collections2
// ᒢᣘᐧᣟ // jppb = klass + number // ᒢᣘᐧᣟ // jpp1 = klass + number
// ᒢᣘᣟᐧ // jppc = ~jpp-base // ᒢᣘᣟᐧ // jpp2 = ~jpp-base
// ᒢᣘᣟᣟ // jppd = jmx + other-optional // ᒢᣘᣟᣟ // jpp3 = jmx + other-optional
//ᒢᐩᐩ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ
//ᒢᐩᐩ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ.ᔆᔿᓑᣗᣘ
//ᒢᐩᐩ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᙆᓫᣗᒄᑊᣕᣔᒻ
//ᒢᣘᐧᐧ.ᒻᣔᣕᒄ.
//ᒢᐩᐩ.ᓫᣕᐪᓫᣗ.ᔆᔿᓑᣗᣘ //ᒢᐩᐩ.ᓫᣕᐪᓫᣗ.ᔆᔿᓑᣗᣘ
//ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᔆʸᔆᐪᓫᔿ.ᣔᒃᣔᒼᓑᔆ //ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᔆʸᔆᐪᓫᔿ.ᣔᒃᣔᒼᓑᔆ
//ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᔆʸᔆᐪᓫᔿ.ᣔᒃᣔᒼᓑᔆ //ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᔆʸᔆᐪᓫᔿ.ᣔᒃᣔᒼᓑᔆ
@ -66,7 +62,7 @@ public class BabelTest {
// - real enum terminator set is from FC18 (FCFlameNumberGram.java) // - real enum terminator set is from FC18 (FCFlameNumberGram.java)
// - bone based terminators up to PIG size 2304 (after 99% of JPP code comes from nether generate on use) // - bone based terminators up to PIG size 2304 (after 99% of JPP code comes from nether generate on use)
// - virtual terminator from nether chord group selector slug path is 2^18 bit pie part values // - virtual terminator from nether chord group selector slug path is 2^18 bit pie part values
// - extended virtual pie slice terminators of nether is thus 2 times 2^18 (so max gun/etc leaf depth is 6 Q slugs) TODO: zerdinal => upgrade 2 long for 36 bit window size // - extended virtual pie slice terminators of nether is thus 2 times 2^18 (so max gun/etc leaf depth is 6 Q slugs)
// ^^ for java3, in java4 100% of runtime+libs is generated per method, so only code which is used. // ^^ for java3, in java4 100% of runtime+libs is generated per method, so only code which is used.
// ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᙆᓫᣗᒄᑊᣕᣔᒻ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᕐᓑᣕᔆ // ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᙆᓫᣗᒄᑊᣕᣔᒻ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᕐᓑᣕᔆ
// ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᒻᓫᕐᐤ.ᒢᓫᑊᐣᑊ (+JediTempleBase256InfinityZero redo generics-tree from LegoᐧBrickᐧTapeᐧRecorderᐧχ3 ?) // ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᒻᓫᕐᐤ.ᒢᓫᑊᐣᑊ (+JediTempleBase256InfinityZero redo generics-tree from LegoᐧBrickᐧTapeᐧRecorderᐧχ3 ?)

View file

@ -84,7 +84,8 @@ public class NumberMatrixFactoryTest {
// size: 20 result: 2432902008176640000 // size: 20 result: 2432902008176640000
// size: 21 result: -4249290049419214848 (long overflow) // size: 21 result: -4249290049419214848 (long overflow)
// collections2: size/zerdinal/offset/etc is signed long (63 bit) // collections2: size/zerdinal/offset/etc is signed long (63 bit)
// collections2D: try <S extends NumberLegoValue> for 18 up to 2304 bit++ // collections2T: ZerdinalX144 extend ZerdinalX0<V144Tocta>
// collections2P: ZerdinalX2304 extend ZerdinalX0<V2304TRexPig>
for (int i = 5; i < 20; i++) { for (int i = 5; i < 20; i++) {
int[] rankFirst = calculateLehmerFromRank(0, i); int[] rankFirst = calculateLehmerFromRank(0, i);
long amount = calculateTotalPermutations(rankFirst); long amount = calculateTotalPermutations(rankFirst);

View file

@ -29,12 +29,12 @@ package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Spliterator; import java.util.Spliterator;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import java.util.stream.Collector;
import java.util.stream.Stream; import java.util.stream.Stream;
import ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ.Rope; import ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ.Rope;
@ -102,11 +102,6 @@ public class ArrayLadderOpen<E> implements LadderOpen<E>,RopeIterable<E> {
return data.set((int) index, element); return data.set((int) index, element);
} }
@Override
public void sort(Comparator<? super E> c) { // TODO: add default impl
data.sort(c);
}
// ---- Optional, but for speed // ---- Optional, but for speed
@Override @Override
@ -140,12 +135,12 @@ public class ArrayLadderOpen<E> implements LadderOpen<E>,RopeIterable<E> {
} }
@Override @Override
public int indexOf(Object o) { public long indexOf(Object o) {
return data.indexOf(o); return data.indexOf(o);
} }
@Override @Override
public int lastIndexOf(Object o) { public long lastIndexOf(Object o) {
return data.lastIndexOf(o); return data.lastIndexOf(o);
} }
@ -194,11 +189,6 @@ public class ArrayLadderOpen<E> implements LadderOpen<E>,RopeIterable<E> {
return data.containsAll(set.toCollection()); return data.containsAll(set.toCollection());
} }
@Override
public Stream<E> parallelStream() {
return data.parallelStream();
}
@Override @Override
public Spliterator<E> spliterator() { public Spliterator<E> spliterator() {
return data.spliterator(); return data.spliterator();
@ -214,16 +204,6 @@ public class ArrayLadderOpen<E> implements LadderOpen<E>,RopeIterable<E> {
return data.addAll(c.toCollection()); return data.addAll(c.toCollection());
} }
// @Override
// public void forEach(Consumer<? super E> action) {
// data.forEach(action);
// }
//
// @Override
// public Spliterator<E> spliterator() {
// return data.spliterator();
// }
@Override @Override
public boolean addAll(long index, Yarn<? extends E> c) { public boolean addAll(long index, Yarn<? extends E> c) {
return data.addAll((int) index, c.toCollection()); return data.addAll((int) index, c.toCollection());

View file

@ -43,15 +43,34 @@ public interface Ladder<E> extends Yarn<E> {
} }
default E get(long index) { default E get(long index) {
return stream().skip(index).collect(Collectors.toList()).get(0); return stream().skip(index).findFirst().get();
} }
default int indexOf(Object o) { // TODO: replace all "long" with ~ZerdinalX63 (extends ZerdinalX0<Long>)
return stream().collect(Collectors.toList()).indexOf(o); default long indexOf(Object obj) {
long ladderSize = size();
for (long i = 0; i < ladderSize; i++) {
E v = get(i);
if (v == null && obj == null) {
return i;
}
if (v != null && v.equals(obj)) {
return i;
}
}
return -1L;
} }
default int lastIndexOf(Object o) { default long lastIndexOf(Object obj) {
return stream().collect(Collectors.toList()).lastIndexOf(o); long lastIdx = -1L;
long currIdx = 0L;
while (currIdx != -1L) {
currIdx = indexOf(obj);
if (currIdx != -1L) {
lastIdx = currIdx;
}
}
return lastIdx;
} }
default RopeLadder<E> ropeLadder() { default RopeLadder<E> ropeLadder() {

View file

@ -27,8 +27,11 @@
package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ; package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ;
import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Objects;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import java.util.stream.Collector;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᙆᓫᣗᒄᑊᣕᣔᒻ.Zerdinal; import ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᙆᓫᣗᒄᑊᣕᣔᒻ.Zerdinal;
@ -56,6 +59,7 @@ public interface LadderOpen<E> extends Ladder<E>, YarnOpen<E> {
boolean result = iterator.hasNext(); boolean result = iterator.hasNext();
while (iterator.hasNext()) { while (iterator.hasNext()) {
add(index, iterator.next()); add(index, iterator.next());
index++;
} }
return result; return result;
} }
@ -67,6 +71,7 @@ public interface LadderOpen<E> extends Ladder<E>, YarnOpen<E> {
E remove(long index); E remove(long index);
default void replaceAll(UnaryOperator<E> operator) { default void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
for (int i = 0; i < size(); i++) { for (int i = 0; i < size(); i++) {
set(i, operator.apply(get(i))); set(i, operator.apply(get(i)));
} }
@ -78,7 +83,15 @@ public interface LadderOpen<E> extends Ladder<E>, YarnOpen<E> {
E set(long index, E element); E set(long index, E element);
/* default */ void sort(Comparator<? super E> c); @SuppressWarnings({ "unchecked", "rawtypes" })
default void sort(Comparator<? super E> c) {
// TODO: int limited
Object[] arr = toArray();
Arrays.sort(arr, (Comparator) c);
for (int i = 0; i < arr.length; i++) {
set(i, (E) arr[i]);
}
}
default RopeLadderOpen<E> ropeLadderOpen() { default RopeLadderOpen<E> ropeLadderOpen() {
return ropeLadderOpen(); return ropeLadderOpen();
@ -98,7 +111,12 @@ public interface LadderOpen<E> extends Ladder<E>, YarnOpen<E> {
} }
default LadderOpen<E> subLadderOpen(long fromIndex, long toIndex) { default LadderOpen<E> subLadderOpen(long fromIndex, long toIndex) {
// TODO: fix cast //return new ArrayLadderOpen<>(stream().collect(Collectors.toList()).subList((int) fromIndex, (int) toIndex));
return new ArrayLadderOpen<>(stream().collect(Collectors.toList()).subList((int) fromIndex, (int) toIndex)); return stream().skip(fromIndex).limit(toIndex).collect(LadderOpen.ofCollector());
}
//TODO: move?
public static <T> Collector<T, ?, LadderOpen<T>> ofCollector() {
return Collector.of(ArrayLadderOpen::new , LadderOpen::add, (v1, v2) -> { v1.addAll(v2); return v1; }, Collector.Characteristics.IDENTITY_FINISH);
} }
} }

View file

@ -28,8 +28,8 @@
package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ; package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ;
import java.util.Collection; import java.util.Collection;
import java.util.Spliterator; import java.util.Iterator;
import java.util.Spliterators; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
@ -51,37 +51,79 @@ public interface Yarn<E> extends RopeIterable<E> {
} }
default boolean contains(Object obj) { default boolean contains(Object obj) {
return stream().collect(Collectors.toSet()).contains(obj); Objects.requireNonNull(obj);
return stream().collect(Collectors.toList()).contains(obj);
} }
default boolean containsAll(Yarn<?> set) { default boolean containsAll(Yarn<?> set) {
return stream().collect(Collectors.toSet()).containsAll(set.stream().collect(Collectors.toSet())); Objects.requireNonNull(set);
} return stream().collect(Collectors.toList()).containsAll(set.toCollection());
default Stream<E> parallelStream() {
return stream().parallel();
}
default Spliterator<E> spliterator() {
return Spliterators.spliteratorUnknownSize(rope().toIterator(), Spliterator.ORDERED);
}
@Deprecated // limited to int size
default Object[] toArray() {
return stream().collect(Collectors.toList()).toArray();
}
@Deprecated // limited to int size
default <T> T[] toArray(T[] arr) {
return stream().collect(Collectors.toList()).toArray(arr);
} }
default Stream<E> stream() { default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false); return StreamSupport.stream(spliterator(), false);
} }
// TODO; add interface wrappers
default Collection<E> toCollection() { default Collection<E> toCollection() {
return stream().collect(Collectors.toList()); return wrapᴼᶠ(this);
}
static <T> Collection<T> wrapᴼᶠ(Yarn<T> wrap) {
Objects.requireNonNull(wrap);
Objects.checkIndex(wrap.size(), Integer.MAX_VALUE);
return new Collection<>() {
@Override
public int size() {
return (int) wrap.size();
}
@Override
public boolean isEmpty() {
return wrap.isEmpty();
}
@Override
public boolean contains(Object obj) {
return wrap.contains(obj);
}
@Override
public boolean containsAll(Collection<?> collection) {
return wrap.containsAll(YarnOpen.wrapᴼᶠ(collection));
}
@Override
public Iterator<T> iterator() {
return wrap.rope().toIterator();
}
@Override
public Object[] toArray() {
return wrap.stream().collect(Collectors.toList()).toArray();
}
@Override
public <X> X[] toArray(X[] arr) {
return wrap.stream().collect(Collectors.toList()).toArray(arr);
}
@Override
public boolean add(T obj) {
throw new UnsupportedOperationException();
}
@Override
public boolean addAll(Collection<? extends T> collection) {
throw new UnsupportedOperationException();
}
@Override
public boolean remove(Object obj) {
throw new UnsupportedOperationException();
}
@Override
public boolean removeAll(Collection<?> collection) {
throw new UnsupportedOperationException();
}
@Override
public boolean retainAll(Collection<?> collection) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
throw new UnsupportedOperationException();
}
};
} }
} }

View file

@ -48,10 +48,11 @@ public interface YarnOpen<E> extends Yarn<E>, AppenderOpen<E> {
} }
default boolean removeAll(Yarn<?> yarn) { default boolean removeAll(Yarn<?> yarn) {
Objects.requireNonNull(yarn);
boolean result = false; boolean result = false;
Rope<?> iterator = yarn.rope(); Rope<?> rope = yarn.rope();
while (iterator.hasNext()) { while (rope.hasNext()) {
if (remove(iterator.next())) { if (remove(rope.next())) {
result = true; result = true;
} }
} }
@ -59,12 +60,14 @@ public interface YarnOpen<E> extends Yarn<E>, AppenderOpen<E> {
} }
default boolean removeIf(Predicate<? super E> filter) { default boolean removeIf(Predicate<? super E> filter) {
return removeAll(new ArrayLadderOpen<>(this.stream().filter(filter).toList())); Objects.requireNonNull(filter);
return removeAll(new ArrayLadderOpen<>(stream().filter(filter).toList()));
} }
default boolean retainAll(Yarn<?> yarn) { default boolean retainAll(Yarn<?> yarn) {
Objects.requireNonNull(yarn);
boolean result = false; boolean result = false;
for (E e:stream().collect(Collectors.toList())) { for (E e : stream().collect(Collectors.toList())) {
if (!yarn.contains(e)) { if (!yarn.contains(e)) {
remove(e); remove(e);
result = true; result = true;
@ -77,97 +80,80 @@ public interface YarnOpen<E> extends Yarn<E>, AppenderOpen<E> {
return wrapᴼᶠ(this); return wrapᴼᶠ(this);
} }
static <T> YarnOpen<T> wrapᴼᶠ(Collection<T> collection) { static <T> YarnOpen<T> wrapᴼᶠ(Collection<T> wrap) {
Objects.requireNonNull(collection); Objects.requireNonNull(wrap);
return new YarnOpen<>() { return new YarnOpen<>() {
@Override @Override
public Rope<T> rope() { public Rope<T> rope() {
return Rope.wrapᴼᶠ(collection.iterator()); return Rope.wrapᴼᶠ(wrap.iterator());
} }
@Override @Override
public boolean add(T obj) { public boolean add(T obj) {
return collection.add(obj); return wrap.add(obj);
} }
@Override @Override
public boolean remove(Object obj) { public boolean remove(Object obj) {
return collection.remove(obj); return wrap.remove(obj);
} }
}; };
} }
static <T> Collection<T> wrapᴼᶠ(YarnOpen<T> yarn) { static <T> Collection<T> wrapᴼᶠ(YarnOpen<T> wrap) {
Objects.requireNonNull(yarn); Objects.requireNonNull(wrap);
Objects.checkIndex(wrap.size(), Integer.MAX_VALUE);
return new Collection<>() { return new Collection<>() {
@Override @Override
public int size() { public int size() {
return (int) yarn.size(); return (int) wrap.size();
} }
@Override @Override
public boolean isEmpty() { public boolean isEmpty() {
return yarn.isEmpty(); return wrap.isEmpty();
} }
@Override @Override
public boolean contains(Object obj) { public boolean contains(Object obj) {
return yarn.contains(obj); return wrap.contains(obj);
} }
@Override
public Iterator<T> iterator() {
return yarn.rope().toIterator();
}
@Override
public Object[] toArray() {
return yarn.toArray();
}
@Override
public <T> T[] toArray(T[] arr) {
return yarn.toArray(arr);
}
@Override
public boolean add(T obj) {
return yarn.add(obj);
}
@Override
public boolean remove(Object obj) {
return yarn.remove(obj);
}
@Override @Override
public boolean containsAll(Collection<?> collection) { public boolean containsAll(Collection<?> collection) {
return yarn.containsAll(YarnOpen.wrapᴼᶠ(collection)); return wrap.containsAll(YarnOpen.wrapᴼᶠ(collection));
}
@Override
public Iterator<T> iterator() {
return wrap.rope().toIterator();
}
@Override
public Object[] toArray() {
return wrap.stream().collect(Collectors.toList()).toArray();
}
@Override
public <X> X[] toArray(X[] arr) {
return wrap.stream().collect(Collectors.toList()).toArray(arr);
}
@Override
public boolean add(T obj) {
return wrap.add(obj);
} }
@Override @Override
public boolean addAll(Collection<? extends T> collection) { public boolean addAll(Collection<? extends T> collection) {
return yarn.addAll(YarnOpen.wrapᴼᶠ(collection)); return wrap.addAll(YarnOpen.wrapᴼᶠ(collection));
}
@Override
public boolean remove(Object obj) {
return wrap.remove(obj);
} }
@Override @Override
public boolean removeAll(Collection<?> collection) { public boolean removeAll(Collection<?> collection) {
return yarn.removeAll(YarnOpen.wrapᴼᶠ(collection)); return wrap.removeAll(YarnOpen.wrapᴼᶠ(collection));
} }
@Override @Override
public boolean retainAll(Collection<?> collection) { public boolean retainAll(Collection<?> collection) {
return yarn.retainAll(YarnOpen.wrapᴼᶠ(collection)); return wrap.retainAll(YarnOpen.wrapᴼᶠ(collection));
} }
@Override @Override
public void clear() { public void clear() {
yarn.clear(); wrap.clear();
} }
}; };
} }
} }

View file

@ -28,6 +28,7 @@
package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ; package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ;
import java.util.Iterator; import java.util.Iterator;
import java.util.Objects;
import java.util.function.Consumer; import java.util.function.Consumer;
/// Read Only Programmable Enumeration. /// Read Only Programmable Enumeration.
@ -50,32 +51,30 @@ public interface Rope<E> {
} }
} }
static <T> Iterator<T> wrapᴼᶠ(Rope<T> iterator) { static <T> Iterator<T> wrapᴼᶠ(Rope<T> wrap) {
Objects.requireNonNull(wrap);
return new Iterator<>() { return new Iterator<>() {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return iterator.hasNext(); return wrap.hasNext();
} }
@Override @Override
public T next() { public T next() {
return iterator.next(); return wrap.next();
} }
}; };
} }
static <T> Rope<T> wrapᴼᶠ(Iterator<T> iterator) { static <T> Rope<T> wrapᴼᶠ(Iterator<T> wrap) {
Objects.requireNonNull(wrap);
return new Rope<>() { return new Rope<>() {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return iterator.hasNext(); return wrap.hasNext();
} }
@Override @Override
public T next() { public T next() {
return iterator.next(); return wrap.next();
} }
}; };
} }

View file

@ -31,8 +31,6 @@ import java.util.Iterator;
import java.util.Spliterator; import java.util.Spliterator;
import java.util.Spliterators; import java.util.Spliterators;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collector;
import java.util.stream.StreamSupport;
/// Make an object iterable with a rope. /// Make an object iterable with a rope.
/// ///
@ -48,11 +46,7 @@ public interface RopeIterable<E> {
} }
default Spliterator<E> spliterator() { default Spliterator<E> spliterator() {
return Spliterators.spliteratorUnknownSize(rope().toIterator(), Spliterator.ORDERED); return Spliterators.spliteratorUnknownSize(rope().toIterator(), 0);
}
default <A, R> R collect(Collector<? super E, A, R> collector) {
return StreamSupport.stream(spliterator(), false).collect(collector);
} }
default Iterable<E> toIterable() { default Iterable<E> toIterable() {

View file

@ -28,6 +28,7 @@
package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ; package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Objects;
/// Rope ladder /// Rope ladder
/// ///
@ -37,37 +38,38 @@ public interface RopeLadder<E> extends Rope<E> {
boolean hasPrevious(); boolean hasPrevious();
long nextIndex();
E previous(); E previous();
long nextIndex();
long previousIndex(); long previousIndex();
static <T> RopeLadder<T> wrapᴼᶠ(ListIterator<T> iterator) { static <T> RopeLadder<T> wrapᴼᶠ(ListIterator<T> wrap) {
Objects.requireNonNull(wrap);
return new RopeLadder<>() { return new RopeLadder<>() {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return iterator.hasNext(); return wrap.hasNext();
} }
@Override @Override
public T next() { public T next() {
return iterator.next(); return wrap.next();
} }
@Override @Override
public boolean hasPrevious() { public boolean hasPrevious() {
return iterator.hasPrevious(); return wrap.hasPrevious();
}
@Override
public long nextIndex() {
return iterator.nextIndex();
} }
@Override @Override
public T previous() { public T previous() {
return iterator.previous(); return wrap.previous();
}
@Override
public long nextIndex() {
return wrap.nextIndex();
} }
@Override @Override
public long previousIndex() { public long previousIndex() {
return iterator.previousIndex(); return wrap.previousIndex();
} }
}; };
} }

View file

@ -28,6 +28,7 @@
package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ; package ᒢᣘᐧᐧ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆᒾ.ᣗᐤᣖᓫ;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Objects;
/// Rope ladder open /// Rope ladder open
/// ///
@ -37,93 +38,95 @@ public interface RopeLadderOpen<E> extends RopeLadder<E>, Rope<E> {
void remove(); void remove();
void add(E obj);
void set(E obj); void set(E obj);
void add(E obj);
default ListIterator<E> toListIterator() { default ListIterator<E> toListIterator() {
return wrapᴼᶠ(this); return wrapᴼᶠ(this);
} }
@Deprecated // limited to int @Deprecated // limited to int
static <T> ListIterator<T> wrapᴼᶠ(RopeLadderOpen<T> iterator) { static <T> ListIterator<T> wrapᴼᶠ(RopeLadderOpen<T> wrap) {
Objects.requireNonNull(wrap);
return new ListIterator<>() { return new ListIterator<>() {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return iterator.hasNext(); return wrap.hasNext();
} }
@Override @Override
public T next() { public T next() {
return iterator.next(); return wrap.next();
}
@Override
public void add(T obj) {
iterator.add(obj);
} }
@Override @Override
public boolean hasPrevious() { public boolean hasPrevious() {
return iterator.hasPrevious(); return wrap.hasPrevious();
}
@Override
public int nextIndex() {
return (int) iterator.nextIndex();
} }
@Override @Override
public T previous() { public T previous() {
return iterator.previous(); return wrap.previous();
}
@Override
public int nextIndex() {
return (int) wrap.nextIndex();
} }
@Override @Override
public int previousIndex() { public int previousIndex() {
return (int) iterator.previousIndex(); return (int) wrap.previousIndex();
} }
@Override @Override
public void remove() { public void remove() {
iterator.remove(); wrap.remove();
} }
@Override @Override
public void set(T obj) { public void set(T obj) {
iterator.set(obj); wrap.set(obj);
}
@Override
public void add(T obj) {
wrap.add(obj);
} }
}; };
} }
static <T> RopeLadderOpen<T> wrapᴼᶠ(ListIterator<T> iterator) { static <T> RopeLadderOpen<T> wrapᴼᶠ(ListIterator<T> wrap) {
Objects.requireNonNull(wrap);
return new RopeLadderOpen<>() { return new RopeLadderOpen<>() {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return iterator.hasNext(); return wrap.hasNext();
} }
@Override @Override
public T next() { public T next() {
return iterator.next(); return wrap.next();
} }
@Override @Override
public boolean hasPrevious() { public boolean hasPrevious() {
return iterator.hasPrevious(); return wrap.hasPrevious();
}
@Override
public long nextIndex() {
return iterator.nextIndex();
} }
@Override @Override
public T previous() { public T previous() {
return iterator.previous(); return wrap.previous();
}
@Override
public long nextIndex() {
return wrap.nextIndex();
} }
@Override @Override
public long previousIndex() { public long previousIndex() {
return iterator.previousIndex(); return wrap.previousIndex();
}
@Override
public void add(T obj) {
iterator.add(obj);
}
@Override
public void set(T obj) {
iterator.set(obj);
} }
@Override @Override
public void remove() { public void remove() {
iterator.remove(); wrap.remove();
}
@Override
public void set(T obj) {
wrap.set(obj);
}
@Override
public void add(T obj) {
wrap.add(obj);
} }
}; };
} }