JPP: Small fixes in collection2 to think abount X0 naming
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 1m4s
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 1m4s
This commit is contained in:
parent
b8855069df
commit
1a29d40fce
11 changed files with 229 additions and 189 deletions
|
|
@ -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 ?)
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,10 +60,12 @@ 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)) {
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue