[ci skip]refactor: convert AbstractConcurrentTable to interface and update ConcurrentTable implementation
This commit is contained in:
+1
-1
@@ -9,7 +9,7 @@ release=true
|
|||||||
# true for push to repo, false for skip push repo, auto for detect by release value
|
# true for push to repo, false for skip push repo, auto for detect by release value
|
||||||
pushRepo=auto
|
pushRepo=auto
|
||||||
|
|
||||||
luminolRef=4a1d048cd05452cd3e2512018996e4d5bb74ce82
|
luminolRef=681db5ba70f72fc1cbfbf5ece5f411bdd8110057
|
||||||
|
|
||||||
org.gradle.configuration-cache=true
|
org.gradle.configuration-cache=true
|
||||||
org.gradle.caching=true
|
org.gradle.caching=true
|
||||||
|
|||||||
+16
-16
@@ -3,34 +3,34 @@ package fun.bm.lophine.utils.concurrent;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public abstract class AbstractConcurrentTable<X, Y, Z> {
|
public interface AbstractConcurrentTable<X, Y, Z> {
|
||||||
public abstract void put(X x, Y y, Z z);
|
void put(X x, Y y, Z z);
|
||||||
|
|
||||||
public abstract void remove(X x, Y y, Z z);
|
void remove(X x, Y y, Z z);
|
||||||
|
|
||||||
public abstract List<Z> getZ(X x, Y y);
|
List<Z> getZ(X x, Y y);
|
||||||
|
|
||||||
public abstract List<Y> getY(X x, Z z);
|
List<Y> getY(X x, Z z);
|
||||||
|
|
||||||
public abstract List<X> getX(Y y, Z z);
|
List<X> getX(Y y, Z z);
|
||||||
|
|
||||||
public abstract Map<X, Y> getXY(Z z);
|
Map<X, Y> getXY(Z z);
|
||||||
|
|
||||||
public abstract Map<Y, Z> getYZ(X x);
|
Map<Y, Z> getYZ(X x);
|
||||||
|
|
||||||
public abstract Map<X, Z> getXZ(Y y);
|
Map<X, Z> getXZ(Y y);
|
||||||
|
|
||||||
public abstract List<X> getAllX();
|
List<X> getAllX();
|
||||||
|
|
||||||
public abstract List<Y> getAllY();
|
List<Y> getAllY();
|
||||||
|
|
||||||
public abstract List<Z> getAllZ();
|
List<Z> getAllZ();
|
||||||
|
|
||||||
public abstract void clearXY(Z z);
|
void clearXY(Z z);
|
||||||
|
|
||||||
public abstract void clearYZ(X x);
|
void clearYZ(X x);
|
||||||
|
|
||||||
public abstract void clearXZ(Y y);
|
void clearXZ(Y y);
|
||||||
|
|
||||||
public abstract void clearAll();
|
void clearAll();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ConcurrentLinkedDeque;
|
import java.util.concurrent.ConcurrentLinkedDeque;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class ConcurrentTable<X, Y, Z> extends AbstractConcurrentTable<X, Y, Z> {
|
public class ConcurrentTable<X, Y, Z> implements AbstractConcurrentTable<X, Y, Z> {
|
||||||
protected final ConcurrentLinkedDeque<TableEntry<X, Y, Z>> data = new ConcurrentLinkedDeque<>();
|
protected final ConcurrentLinkedDeque<TableEntry<X, Y, Z>> data = new ConcurrentLinkedDeque<>();
|
||||||
protected final boolean flagX;
|
protected final boolean flagX;
|
||||||
protected final boolean flagY;
|
protected final boolean flagY;
|
||||||
@@ -60,88 +60,88 @@ public class ConcurrentTable<X, Y, Z> extends AbstractConcurrentTable<X, Y, Z> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(X x, Y y, Z z) {
|
public void remove(X x, Y y, Z z) {
|
||||||
data.removeIf(entry -> entry.getX().equals(x) && entry.getY().equals(y) && entry.getZ().equals(z));
|
data.removeIf(entry -> entry.x().equals(x) && entry.y().equals(y) && entry.z().equals(z));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Z> getZ(X x, Y y) {
|
public List<Z> getZ(X x, Y y) {
|
||||||
return filterAndCollect(
|
return filterAndCollect(
|
||||||
entry -> entry.getX().equals(x) && entry.getY().equals(y),
|
entry -> entry.x().equals(x) && entry.y().equals(y),
|
||||||
TableEntry::getZ
|
TableEntry::z
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Y> getY(X x, Z z) {
|
public List<Y> getY(X x, Z z) {
|
||||||
return filterAndCollect(
|
return filterAndCollect(
|
||||||
entry -> entry.getX().equals(x) && entry.getZ().equals(z),
|
entry -> entry.x().equals(x) && entry.z().equals(z),
|
||||||
TableEntry::getY
|
TableEntry::y
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<X> getX(Y y, Z z) {
|
public List<X> getX(Y y, Z z) {
|
||||||
return filterAndCollect(
|
return filterAndCollect(
|
||||||
entry -> entry.getY().equals(y) && entry.getZ().equals(z),
|
entry -> entry.y().equals(y) && entry.z().equals(z),
|
||||||
TableEntry::getX
|
TableEntry::x
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<X, Y> getXY(Z z) {
|
public Map<X, Y> getXY(Z z) {
|
||||||
return filterAndMap(
|
return filterAndMap(
|
||||||
entry -> entry.getZ().equals(z),
|
entry -> entry.z().equals(z),
|
||||||
TableEntry::getX,
|
TableEntry::x,
|
||||||
TableEntry::getY
|
TableEntry::y
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<Y, Z> getYZ(X x) {
|
public Map<Y, Z> getYZ(X x) {
|
||||||
return filterAndMap(
|
return filterAndMap(
|
||||||
entry -> entry.getX().equals(x),
|
entry -> entry.x().equals(x),
|
||||||
TableEntry::getY,
|
TableEntry::y,
|
||||||
TableEntry::getZ
|
TableEntry::z
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<X, Z> getXZ(Y y) {
|
public Map<X, Z> getXZ(Y y) {
|
||||||
return filterAndMap(
|
return filterAndMap(
|
||||||
entry -> entry.getY().equals(y),
|
entry -> entry.y().equals(y),
|
||||||
TableEntry::getX,
|
TableEntry::x,
|
||||||
TableEntry::getZ
|
TableEntry::z
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<X> getAllX() {
|
public List<X> getAllX() {
|
||||||
return collectAll(TableEntry::getX);
|
return collectAll(TableEntry::x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Y> getAllY() {
|
public List<Y> getAllY() {
|
||||||
return collectAll(TableEntry::getY);
|
return collectAll(TableEntry::y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Z> getAllZ() {
|
public List<Z> getAllZ() {
|
||||||
return collectAll(TableEntry::getZ);
|
return collectAll(TableEntry::z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearXY(Z z) {
|
public void clearXY(Z z) {
|
||||||
data.removeIf(entry -> entry.getZ().equals(z));
|
data.removeIf(entry -> entry.z().equals(z));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearYZ(X x) {
|
public void clearYZ(X x) {
|
||||||
data.removeIf(entry -> entry.getX().equals(x));
|
data.removeIf(entry -> entry.x().equals(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearXZ(Y y) {
|
public void clearXZ(Y y) {
|
||||||
data.removeIf(entry -> entry.getY().equals(y));
|
data.removeIf(entry -> entry.y().equals(y));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+6
-6
@@ -76,9 +76,9 @@ public class OptimizedConcurrentTable<X, Y, Z> extends ConcurrentTable<X, Y, Z>
|
|||||||
data.removeIf(entry -> {
|
data.removeIf(entry -> {
|
||||||
boolean shouldRemove = predicate.test(entry);
|
boolean shouldRemove = predicate.test(entry);
|
||||||
if (shouldRemove) {
|
if (shouldRemove) {
|
||||||
removeFromIndex(xyIndex, entry.getX(), entry.getY(), entry.getZ());
|
removeFromIndex(xyIndex, entry.x(), entry.y(), entry.z());
|
||||||
removeFromIndex(yzIndex, entry.getY(), entry.getZ(), entry.getX());
|
removeFromIndex(yzIndex, entry.y(), entry.z(), entry.x());
|
||||||
removeFromIndex(zxIndex, entry.getZ(), entry.getX(), entry.getY());
|
removeFromIndex(zxIndex, entry.z(), entry.x(), entry.y());
|
||||||
}
|
}
|
||||||
return shouldRemove;
|
return shouldRemove;
|
||||||
});
|
});
|
||||||
@@ -86,9 +86,9 @@ public class OptimizedConcurrentTable<X, Y, Z> extends ConcurrentTable<X, Y, Z>
|
|||||||
|
|
||||||
public boolean putIfAbsent(X x, Y y, Z z) {
|
public boolean putIfAbsent(X x, Y y, Z z) {
|
||||||
if (data.stream().anyMatch(entry ->
|
if (data.stream().anyMatch(entry ->
|
||||||
Objects.equals(entry.getX(), x) &&
|
Objects.equals(entry.x(), x) &&
|
||||||
Objects.equals(entry.getY(), y) &&
|
Objects.equals(entry.y(), y) &&
|
||||||
Objects.equals(entry.getZ(), z))) {
|
Objects.equals(entry.z(), z))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
put(x, y, z);
|
put(x, y, z);
|
||||||
|
|||||||
@@ -1,25 +1,4 @@
|
|||||||
package fun.bm.lophine.utils.concurrent;
|
package fun.bm.lophine.utils.concurrent;
|
||||||
|
|
||||||
public class TableEntry<X, Y, Z> {
|
public record TableEntry<X, Y, Z>(X x, Y y, Z z) {
|
||||||
private final X x;
|
|
||||||
private final Y y;
|
|
||||||
private final Z z;
|
|
||||||
|
|
||||||
public TableEntry(X x, Y y, Z z) {
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
this.z = z;
|
|
||||||
}
|
|
||||||
|
|
||||||
public X getX() {
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Y getY() {
|
|
||||||
return y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Z getZ() {
|
|
||||||
return z;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user