Fix compile

This commit is contained in:
Jesse Boyd
2019-11-07 10:28:17 +00:00
parent fb2f6668b4
commit 82f5c4ebed
37 changed files with 316 additions and 201 deletions

View File

@ -9,7 +9,7 @@ import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
public interface IChunkExtent extends Extent {
public interface IChunkExtent<T extends IChunk> extends Extent {
/**
* Get the IChunk at a position (and cache it if it's not already)
*
@ -17,7 +17,7 @@ public interface IChunkExtent extends Extent {
* @param z
* @return IChunk
*/
IChunk getOrCreateChunk(int chunkX, int chunkZ);
T getOrCreateChunk(int chunkX, int chunkZ);
@Override
default boolean setBlock(int x, int y, int z, BlockStateHolder state) {

View File

@ -80,7 +80,7 @@ public class BitSetBlocks implements IChunkSet {
}
@Override
public char[] getArray(int layer) {
public char[] load(int layer) {
char[] arr = FaweCache.IMP.SECTION_BITS_TO_CHAR.get();
MemBlockSet.IRow nullRowY = row.getRow(layer);
if (nullRowY instanceof MemBlockSet.RowY) {

View File

@ -2,16 +2,9 @@ package com.boydti.fawe.beta.implementation.blocks;
import com.boydti.fawe.beta.IBlocks;
import com.boydti.fawe.beta.IChunkSet;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.block.BlockTypesCache;
import java.util.Map;
import java.util.Set;
public abstract class CharBlocks implements IBlocks {
public static final Section FULL = new Section() {
@ -26,9 +19,9 @@ public abstract class CharBlocks implements IBlocks {
blocks.sections[layer] = FULL;
char[] arr = blocks.blocks[layer];
if (arr == null) {
arr = blocks.blocks[layer] = blocks.load(layer);
arr = blocks.blocks[layer] = blocks.update(layer, null);
} else {
blocks.blocks[layer] = blocks.load(layer, arr);
blocks.blocks[layer] = blocks.update(layer, arr);
}
return arr;
}
@ -74,11 +67,10 @@ public abstract class CharBlocks implements IBlocks {
sections[layer] = EMPTY;
}
public char[] load(int layer) {
return new char[4096];
}
public char[] load(int layer, char[] data) {
public char[] update(int layer, char[] data) {
if (data == null) {
return new char[4096];
}
for (int i = 0; i < 4096; i++) {
data[i] = 0;
}
@ -91,7 +83,7 @@ public abstract class CharBlocks implements IBlocks {
}
@Override
public char[] getArray(int layer) {
public char[] load(int layer) {
return sections[layer].get(this, layer);
}

View File

@ -54,8 +54,8 @@ public interface DelegateChunkSet extends IChunkSet {
}
@Override
default char[] getArray(int layer) {
return getParent().getArray(layer);
default char[] load(int layer) {
return getParent().load(layer);
}
@Override

View File

@ -4,7 +4,6 @@ import com.boydti.fawe.FaweCache;
import com.boydti.fawe.beta.IBlocks;
import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet;
import com.boydti.fawe.util.MathMan;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
@ -90,7 +89,7 @@ public class FallbackChunkGet implements IChunkGet {
public <T extends Future<T>> T call(IChunkSet set, Runnable finalize) {
for (int layer = 0; layer < 16; layer++) {
if (set.hasSection(layer)) {
char[] arr = set.getArray(layer);
char[] arr = set.load(layer);
int by = layer << 4;
for (int y = 0, i = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) {
@ -160,11 +159,6 @@ public class FallbackChunkGet implements IChunkGet {
return true;
}
@Override
public char[] getArray(int layer) {
return new char[0];
}
@Override
public IBlocks reset() {
return null;

View File

@ -76,11 +76,6 @@ public enum NullChunkGet implements IChunkGet {
return false;
}
@Override
public char[] getArray(int layer) {
return new char[0];
}
@Override
public IBlocks reset() {
return null;

View File

@ -1,10 +1,9 @@
package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.FaweCache;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.beta.Filter;
import com.boydti.fawe.beta.FilterBlockMask;
import com.boydti.fawe.beta.Flood;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet;
@ -27,7 +26,7 @@ import javax.annotation.Nullable;
/**
* An abstract {@link IChunk} class that implements basic get/set blocks
*/
public class ChunkHolder<T extends Future<T>> implements IChunk {
public class ChunkHolder<T extends Future<T>> implements IQueueChunk {
private static FaweCache.Pool<ChunkHolder> POOL = FaweCache.IMP.registerPool(ChunkHolder.class, ChunkHolder::new, Settings.IMP.QUEUE.POOL);
@ -61,7 +60,32 @@ public class ChunkHolder<T extends Future<T>> implements IChunk {
@Override
public boolean setTile(int x, int y, int z, CompoundTag tag) {
return false;
return delegate.set(this).setTile(x, y, z, tag);
}
@Override
public void setEntity(CompoundTag tag) {
delegate.set(this).setEntity(tag);
}
@Override
public void removeEntity(UUID uuid) {
delegate.set(this).removeEntity(uuid);
}
@Override
public Set<UUID> getEntityRemoves() {
return delegate.set(this).getEntityRemoves();
}
@Override
public BiomeType[] getBiomes() {
return delegate.set(this).getBiomes(); // TODO return get?
}
@Override
public void setBlocks(int layer, char[] data) {
delegate.set(this).setBlocks(layer, data);
}
@Override
@ -259,10 +283,10 @@ public class ChunkHolder<T extends Future<T>> implements IChunk {
}
};
@Override
public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
// block.flood(get, set, mask, block, );
}
// @Override
// public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
//// block.flood(get, set, mask, block, );
// }
@Override
public CompoundTag getTag(int x, int y, int z) {
@ -285,11 +309,6 @@ public class ChunkHolder<T extends Future<T>> implements IChunk {
return chunkExisting != null && chunkExisting.hasSection(layer);
}
@Override
public char[] getArray(int layer) {
return delegate.get(this).getArray(layer);
}
@Override
public void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region) {
final IChunkGet get = getOrCreateGet();

View File

@ -2,11 +2,17 @@ package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IDelegateChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.world.biome.BiomeType;
import java.util.Set;
import java.util.UUID;
/**
* Implementation of IDelegateChunk
*/
public class DelegateChunk<T extends IChunk> implements IDelegateChunk<T> {
public class DelegateChunk<T extends IQueueChunk> implements IDelegateChunk<T> {
private T parent;

View File

@ -1,6 +1,6 @@
package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent;
/**
@ -11,7 +11,7 @@ public class FinalizedChunk extends DelegateChunk {
private final IQueueExtent queueExtent;
public FinalizedChunk(IChunk parent, IQueueExtent queueExtent) {
public FinalizedChunk(IQueueChunk parent, IQueueExtent queueExtent) {
super(parent);
this.queueExtent = queueExtent;
}

View File

@ -1,5 +1,6 @@
package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.beta.Filter;
import com.boydti.fawe.beta.FilterBlockMask;
@ -23,7 +24,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Future;
public enum NullChunk implements IChunk {
public enum NullChunk implements IQueueChunk {
INSTANCE;
@Override
@ -54,10 +55,10 @@ public enum NullChunk implements IChunk {
}
@Override
public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
}
// @Override
// public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
//
// }
@Override
public boolean setBiome(int x, int y, int z, BiomeType biome) {
@ -69,11 +70,36 @@ public enum NullChunk implements IChunk {
return false;
}
@Override
public void setEntity(CompoundTag tag) {
}
@Override
public void removeEntity(UUID uuid) {
}
@Override
public Set<UUID> getEntityRemoves() {
return null;
}
@Override
public BiomeType[] getBiomes() {
return null;
}
@Override
public boolean setBlock(int x, int y, int z, BlockStateHolder block) {
return false;
}
@Override
public void setBlocks(int layer, char[] data) {
}
@Override
public BiomeType getBiomeType(int x, int z) {
return null;
@ -84,11 +110,6 @@ public enum NullChunk implements IChunk {
return false;
}
@Override
public char[] getArray(int layer) {
return null;
}
@Override
public BlockState getBlock(int x, int y, int z) {
return BlockTypes.__RESERVED__.getDefaultState();

View File

@ -2,6 +2,7 @@ package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IDelegateChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent;
import java.lang.ref.Reference;
@ -14,14 +15,14 @@ public abstract class ReferenceChunk implements IDelegateChunk {
private final Reference<FinalizedChunk> reference;
public ReferenceChunk(IChunk parent, IQueueExtent queueExtent) {
public ReferenceChunk(IQueueChunk parent, IQueueExtent queueExtent) {
this.reference = toReference(new FinalizedChunk(parent, queueExtent));
}
protected abstract Reference<FinalizedChunk> toReference(FinalizedChunk parent);
@Override
public IChunk getParent() {
public IQueueChunk getParent() {
final FinalizedChunk finalized = reference.get();
return finalized != null ? finalized.getParent() : null;
}

View File

@ -1,6 +1,7 @@
package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent;
import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
@ -10,7 +11,7 @@ import java.lang.ref.SoftReference;
*/
public class SoftChunk extends ReferenceChunk {
public SoftChunk(IChunk parent, IQueueExtent queueExtent) {
public SoftChunk(IQueueChunk parent, IQueueExtent queueExtent) {
super(parent, queueExtent);
}

View File

@ -1,6 +1,7 @@
package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent;
import java.lang.ref.Reference;
@ -11,7 +12,7 @@ import java.lang.ref.WeakReference;
*/
public class WeakChunk extends ReferenceChunk {
public WeakChunk(IChunk parent, IQueueExtent queueExtent) {
public WeakChunk(IQueueChunk parent, IQueueExtent queueExtent) {
super(parent, queueExtent);
}

View File

@ -94,7 +94,7 @@ public class CharFilterBlock extends ChunkFilterBlock {
this.set = iset;
getArr = get.sections[layer].get(get, layer);
if (set.hasSection(layer)) {
setArr = set.getArray(layer);
setArr = set.load(layer);
delegate = FULL;
} else {
delegate = NULL;
@ -409,7 +409,7 @@ public class CharFilterBlock extends ChunkFilterBlock {
Set delegate
*/
private SetDelegate initSet() {
setArr = set.getArray(layer);
setArr = set.load(layer);
return delegate = FULL;
}

View File

@ -6,6 +6,7 @@ import com.boydti.fawe.beta.IBatchProcessor;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent;
import com.boydti.fawe.beta.Trimable;
import com.boydti.fawe.beta.implementation.cache.ChunkCache;
@ -228,7 +229,7 @@ public abstract class QueueHandler implements Trimable, Runnable {
}
}
public <T extends Future<T>> T submit(IChunk<T> chunk) {
public <T extends Future<T>> T submit(IQueueChunk<T> chunk) {
// if (MemUtil.isMemoryFree()) { TODO NOT IMPLEMENTED - optimize this
// return (T) forkJoinPoolSecondary.submit(chunk);
// }

View File

@ -1,6 +1,7 @@
package com.boydti.fawe.beta.implementation.queue;
import com.boydti.fawe.Fawe;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.implementation.filter.block.CharFilterBlock;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.beta.IBatchProcessor;
@ -34,12 +35,12 @@ import java.util.concurrent.Future;
* <p>
* This queue is reusable {@link #init(IChunkCache)}
*/
public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implements IQueueExtent {
public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implements IQueueExtent<IQueueChunk> {
// // Pool discarded chunks for reuse (can safely be cleared by another thread)
// private static final ConcurrentLinkedQueue<IChunk> CHUNK_POOL = new ConcurrentLinkedQueue<>();
// Chunks currently being queued / worked on
private final Long2ObjectLinkedOpenHashMap<IChunk> chunks = new Long2ObjectLinkedOpenHashMap<>();
private final Long2ObjectLinkedOpenHashMap<IQueueChunk> chunks = new Long2ObjectLinkedOpenHashMap<>();
private IChunkCache<IChunkGet> cacheGet;
private IChunkCache<IChunkSet> cacheSet;
@ -48,7 +49,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
private Thread currentThread;
private ConcurrentLinkedQueue<Future> submissions = new ConcurrentLinkedQueue<>();
// Last access pointers
private IChunk lastChunk;
private IQueueChunk lastChunk;
private long lastPair = Long.MAX_VALUE;
private boolean enabledQueue = true;
@ -135,7 +136,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
}
@Override
public <T extends Future<T>> T submit(IChunk<T> chunk) {
public <V extends Future<V>> V submit(IQueueChunk chunk) {
if (lastChunk == chunk) {
lastPair = Long.MAX_VALUE;
lastChunk = null;
@ -152,18 +153,18 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
* @param <T>
* @return
*/
private <T extends Future<T>> T submitUnchecked(IChunk<T> chunk) {
private <V extends Future<V>> V submitUnchecked(IQueueChunk chunk) {
if (chunk.isEmpty()) {
chunk.recycle();
Future result = Futures.immediateFuture(null);
return (T) result;
return (V) result;
}
if (Fawe.isMainThread()) {
return chunk.call();
return (V) chunk.call();
}
return Fawe.get().getQueueHandler().submit(chunk);
return (V) Fawe.get().getQueueHandler().submit(chunk);
}
@Override
@ -195,14 +196,14 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
* @param Z
* @return IChunk
*/
private IChunk poolOrCreate(int X, int Z) {
IChunk next = create(false);
private ChunkHolder poolOrCreate(int X, int Z) {
ChunkHolder next = create(false);
next.init(this, X, Z);
return next;
}
@Override
public final IChunk getOrCreateChunk(int x, int z) {
public final IQueueChunk getOrCreateChunk(int x, int z) {
final long pair = (long) x << 32 | z & 0xffffffffL;
if (pair == lastPair) {
return lastChunk;
@ -213,7 +214,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
return NullChunk.INSTANCE;
}
IChunk chunk = chunks.get(pair);
IQueueChunk chunk = chunks.get(pair);
if (chunk instanceof ReferenceChunk) {
chunk = ((ReferenceChunk) chunk).getParent();
}
@ -251,7 +252,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
}
@Override
public IChunk create(boolean isFull) {
public ChunkHolder create(boolean isFull) {
return ChunkHolder.newInstance();
}
@ -299,7 +300,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
public synchronized void flush() {
if (!chunks.isEmpty()) {
if (MemUtil.isMemoryLimited()) {
for (IChunk chunk : chunks.values()) {
for (IQueueChunk chunk : chunks.values()) {
final Future future = submitUnchecked(chunk);
if (future != null && !future.isDone()) {
pollSubmissions(Settings.IMP.QUEUE.PARALLEL_THREADS, true);
@ -307,7 +308,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
}
}
} else {
for (IChunk chunk : chunks.values()) {
for (IQueueChunk chunk : chunks.values()) {
final Future future = submitUnchecked(chunk);
if (future != null && !future.isDone()) {
submissions.add(future);