Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import javasabr.rlib.collections.array.impl.CopyOnWriteMutableArray;
import javasabr.rlib.collections.array.impl.DefaultMutableArray;
import javasabr.rlib.collections.array.impl.StampedLockBasedMutableArray;
import javasabr.rlib.collections.array.impl.StampedLockBasedArray;
import javasabr.rlib.common.util.ClassUtils;
import lombok.experimental.UtilityClass;

Expand All @@ -21,7 +21,7 @@ public static <E> MutableArray<E> copyOnModifyArray(Class<? super E> type) {
return new CopyOnWriteMutableArray<>(type);
}

public static <E> LockableMutableArray<E> stampedLockBasedArray(Class<? super E> type) {
return new StampedLockBasedMutableArray<>(type);
public static <E> LockableArray<E> stampedLockBasedArray(Class<? super E> type) {
return new StampedLockBasedArray<>(type);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import javasabr.rlib.functions.ObjObjLongConsumer;
import javasabr.rlib.functions.TriConsumer;
import org.jspecify.annotations.Nullable;

Expand All @@ -14,5 +15,7 @@ public interface ArrayIterationFunctions<E> {

<F, S> ArrayIterationFunctions<E> forEach(F arg1, S arg2, TriConsumer<? super E, F, S> consumer);

<F> ArrayIterationFunctions<E> forEach(F arg1, long arg2, ObjObjLongConsumer<? super E, F> consumer);

<T> boolean anyMatch(T arg1, BiPredicate<? super E, T> filter);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package javasabr.rlib.collections.array;

import javasabr.rlib.collections.operation.LockableSource;
import javasabr.rlib.common.util.ThreadSafe;

public interface LockableArray<E> extends MutableArray<E>, LockableSource, ThreadSafe {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import javasabr.rlib.collections.array.Array;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package javasabr.rlib.collections.array.impl;

import java.util.concurrent.atomic.AtomicInteger;
import javasabr.rlib.collections.array.LockableMutableArray;
import javasabr.rlib.collections.array.LockableArray;
import javasabr.rlib.common.util.ArrayUtils;
import lombok.AccessLevel;
import lombok.Getter;
Expand All @@ -12,8 +12,7 @@

@Accessors(fluent = true, chain = false)
@FieldDefaults(level = AccessLevel.PROTECTED)
public abstract class AbstractLockableMutableArray<E> extends AbstractMutableArray<E> implements
LockableMutableArray<E> {
public abstract class AbstractLockableArray<E> extends AbstractMutableArray<E> implements LockableArray<E> {

protected static final int DEFAULT_CAPACITY = 10;

Expand All @@ -23,11 +22,11 @@ public abstract class AbstractLockableMutableArray<E> extends AbstractMutableArr
@Setter(AccessLevel.PROTECTED)
volatile @Nullable E[] wrapped;

protected AbstractLockableMutableArray(Class<? super E> type) {
protected AbstractLockableArray(Class<? super E> type) {
this(type, DEFAULT_CAPACITY);
}

protected AbstractLockableMutableArray(Class<? super E> type, int capacity) {
protected AbstractLockableArray(Class<? super E> type, int capacity) {
super(type);
validateCapacity(capacity);
this.wrapped = ArrayUtils.create(type, capacity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.UnsafeArray;
import javasabr.rlib.collections.array.UnsafeMutableArray;
import javasabr.rlib.common.util.ArrayUtils;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import org.jspecify.annotations.Nullable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.function.BiPredicate;
import javasabr.rlib.collections.array.ArrayIterationFunctions;
import javasabr.rlib.collections.array.UnsafeArray;
import javasabr.rlib.functions.ObjObjLongConsumer;
import javasabr.rlib.functions.TriConsumer;
import org.jspecify.annotations.Nullable;

Expand Down Expand Up @@ -44,6 +45,16 @@ public <F, S> ArrayIterationFunctions<E> forEach(F arg1, S arg2, TriConsumer<? s
return this;
}

@Override
public <F> ArrayIterationFunctions<E> forEach(F arg1, long arg2, ObjObjLongConsumer<? super E, F> consumer) {
@Nullable E[] wrapped = array.wrapped();
int size = array.size();
for (int i = 0; i < size; i++) {
consumer.accept(wrapped[i], arg1, arg2);
}
return this;
}

@Override
public <T> boolean anyMatch(T arg1, BiPredicate<? super E, T> filter) {
return findAny(arg1, filter) != null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
import lombok.experimental.FieldDefaults;

@FieldDefaults(level = AccessLevel.PROTECTED, makeFinal = true)
public class StampedLockBasedMutableArray<E> extends AbstractLockableMutableArray<E> {
public class StampedLockBasedArray<E> extends AbstractLockableArray<E> {

StampedLock stampedLock;

public StampedLockBasedMutableArray(Class<? super E> type) {
public StampedLockBasedArray(Class<? super E> type) {
this(type, DEFAULT_CAPACITY);
}

public StampedLockBasedMutableArray(Class<? super E> type, int capacity) {
public StampedLockBasedArray(Class<? super E> type, int capacity) {
super(type, capacity);
this.stampedLock = new StampedLock();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package javasabr.rlib.collections.deque;

import java.util.Deque;
import javasabr.rlib.collections.deque.impl.DefaultLinkedListBasedDeque;
import lombok.experimental.UtilityClass;

/**
* @author JavaSaBr
*/
@UtilityClass
public class DequeFactory {
public static <E> Deque<E> linkedListBased() {
return new DefaultLinkedListBasedDeque<>();
}
}
Loading
Loading