[ci skip]refactor: convert AbstractConcurrentTable to interface and update ConcurrentTable implementation

This commit is contained in:
Helvetica Volubi
2026-06-13 01:19:56 +08:00
parent 3763d0b885
commit 0989bcaec7
5 changed files with 47 additions and 68 deletions
+1 -1
View File
@@ -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
@@ -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
@@ -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;
}
} }