ShortSectionPalette class
Пакет: com.hypixel.hytale.server.core.universe.world.chunk.section.palette
Файл: com/hypixel/hytale/server/core/universe/world/chunk/section/palette/ShortSectionPalette.java
extends: AbstractSectionPalette
Поля (64)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
KEY_MASK |
|
Int2ShortMap |
var1 |
|
Int2ShortMap |
var1 |
|
int |
var10 |
|
short |
var10 |
|
short |
var11 |
|
short |
var17 |
|
short |
var2 |
|
short |
var2 |
|
ObjectIterator |
var2 |
|
ShortSet |
var2 |
|
int |
var2 |
|
Short2IntMap |
var2 |
|
short |
var3 |
|
short |
var3 |
|
int |
var3 |
|
it.unimi.dsi.fastutil.shorts.Short2ShortMap.Entry |
var3 |
|
ShortSet |
var3 |
|
ShortSet |
var3 |
|
int |
var3 |
|
IntIterator |
var3 |
|
BitSet |
var3 |
|
int |
var4 |
|
short |
var4 |
|
int |
var4 |
|
int |
var4 |
|
short |
var4 |
|
int |
var4 |
|
int |
var4 |
|
int |
var4 |
|
Short2ShortMap |
var4 |
|
Entry |
var5 |
|
short |
var5 |
|
short |
var5 |
|
short |
var5 |
|
short |
var5 |
|
it.unimi.dsi.fastutil.shorts.Short2IntMap.Entry |
var5 |
|
ObjectIterator |
var5 |
|
Short2ShortMap |
var5 |
|
|
var5 |
|
ObjectIterator |
var5 |
|
int |
var6 |
|
short |
var6 |
|
int |
var6 |
|
int |
var6 |
|
int |
var6 |
|
short |
var6 |
|
it.unimi.dsi.fastutil.shorts.Short2IntMap.Entry |
var6 |
|
int |
var6 |
|
it.unimi.dsi.fastutil.bytes.Byte2IntMap.Entry |
var6 |
|
short |
var7 |
|
boolean |
var7 |
|
short |
var7 |
|
short |
var7 |
|
int |
var7 |
|
short |
var7 |
|
short |
var7 |
|
int |
var8 |
|
int |
var8 |
|
short |
var8 |
|
int |
var8 |
|
int |
var9 |
|
int |
var9 |
|
short[] |
var9 |
Методы (23)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Short palette cannot be promoted.") |
private |
ShortSet |
buildInternalShortSetShortSet buildInternalShortSet(IntList var1) |
private |
void |
createBlockIdvoid createBlockId(short var1, int var2) |
private |
boolean |
decrementBlockCountboolean decrementBlockCount(short var1) |
|
|
for for(int var8 = var6; var8 < var9; var8++) |
|
|
for for(int var8 = var6; var8 < var4; var8++) |
|
|
for for(int var9 = var6; var9 < var4; var9++) |
|
|
for for(int var7 = 0; var7 < var6; var7++) |
|
|
for for(int var16 = 0; var16 < 32768; var16++) |
|
|
for for(int var10 = 0; var10 < 32768; var10++) |
abstract |
|
for for(int var2 = 0; var2 < var1.size() |
abstract |
|
for for(int var3 = 0; var3 < var1.size() |
|
|
if if(var6 == var3) |
|
|
if if(var2 == 1) |
|
|
if if(var4 != -32768) |
|
|
if if(var5 == null) |
|
|
if if(var5 != null) |
private |
void |
incrementBlockCountvoid incrementBlockCount(short var1) |
private |
boolean |
isValidInternalIdboolean isValidInternalId(int var1) |
private |
int |
nextInternalIdint nextInternalId(short var1) |
|
|
while while(var9 < var1.length) |
|
|
while while(var4 < 32768) |
|
|
while while(var4 < 32768) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.chunk.section.palette;
class="kw">import com.hypixel.hytale.function.consumer.BiIntConsumer;
class="kw">import com.hypixel.hytale.math.util.NumberUtil;
class="kw">import com.hypixel.hytale.protocol.packets.world.PaletteType;
class="kw">import com.hypixel.hytale.server.core.util.io.MemorySegmentUtil;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ShortMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ShortMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ShortOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntIterator;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ShortMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.shorts.Short2IntMap;
class="kw">import it.unimi.dsi.fastutil.shorts.Short2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.shorts.Short2ShortMap;
class="kw">import it.unimi.dsi.fastutil.shorts.Short2ShortOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortSet;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.util.BitSet;
class="kw">import java.util.function.IntConsumer;
class="kw">import javax.annotation.Nonnull;
class="kw">public class="kw">final class ShortSectionPalette class="kw">extends AbstractSectionPalette {
class="kw">private class="kw">static class="kw">final int KEY_MASK = 65535;
class="kw">public class="kw">static class="kw">final int MAX_SIZE = 65536;
class="kw">public class="kw">static class="kw">final int DEMOTE_SIZE = 251;
class="kw">final Int2ShortMap externalToInternal;
class="kw">final Short2IntMap internalToExternal;
class="kw">final BitSet internalIdSet;
class="kw">final Short2ShortMap internalIdCount;
class="kw">final short[] blocks;
class="kw">public ShortSectionPalette() {
this.externalToInternal = new Int2ShortOpenHashMap();
this.internalToExternal = new Short2IntOpenHashMap();
this.internalIdSet = new BitSet();
this.internalIdCount = new Short2ShortOpenHashMap();
this.blocks = new short[32768];
this.externalToInternal.put(0, (short)0);
this.internalToExternal.put((short)0, 0);
this.internalIdSet.set(0);
this.internalIdCount.put((short)0, (short)-32768);
}
ShortSectionPalette(Int2ShortMap var1, Short2IntMap var2, BitSet var3, Short2ShortMap var4, short[] var5) {
this.externalToInternal = var1;
this.internalToExternal = var2;
this.internalIdSet = var3;
this.internalIdCount = var4;
this.blocks = var5;
}
class="kw">public ShortSectionPalette(@Nonnull int[] var1, @Nonnull Int2ShortMap var2) {
this.blocks = new short[32768];
this.externalToInternal = new Int2ShortOpenHashMap(var2.size());
this.internalToExternal = new Short2IntOpenHashMap(var2.size());
this.internalIdSet = new BitSet(var2.size());
this.internalIdCount = new Short2ShortOpenHashMap(var2.size());
short var3 = 0;
for (ObjectIterator var4 = Int2ShortMaps.fastIterable(var2).iterator(); var4.hasNext(); var3++) {
Entry var5 = (Entry)var4.next();
this.internalToExternal.put(var3, var5.getIntKey());
this.externalToInternal.put(var5.getIntKey(), var3);
this.internalIdSet.set(var3);
this.internalIdCount.put(var3, var5.getShortValue());
}
int var9 = 0;
while (var9 < var1.length) {
int var10 = var1[var9];
int var6 = var9;
do {
var9++;
} while (var9 < var1.length && var1[var9] == var10);
short var7 = this.externalToInternal.get(var10);
for (int var8 = var6; var8 < var9; var8++) {
this.blocks[var8] = var7;
}
}
}
@Nonnull
@Override
class="kw">public PaletteType getPaletteType() {
class="kw">return PaletteType.Short;
}
@Override
class="kw">public int get(int var1) {
class="kw">return this.internalToExternal.get(this.blocks[var1]);
}
@Nonnull
@Override
class="kw">public AbstractSectionPalette.SetResult set(int var1, int var2) {
short var3 = this.blocks[var1];
if (this.externalToInternal.containsKey(var2)) {
short var6 = this.externalToInternal.get(var2);
if (var6 == var3) {
class="kw">return AbstractSectionPalette.SetResult.UNCHANGED;
}
boolean var7 = this.decrementBlockCount(var3);
this.incrementBlockCount(var6);
this.blocks[var1] = var6;
class="kw">return var7 ? AbstractSectionPalette.SetResult.ADDED_OR_REMOVED : AbstractSectionPalette.SetResult.CHANGED;
} else {
int var4 = this.nextInternalId(var3);
if (!this.isValidInternalId(var4)) {
class="kw">return AbstractSectionPalette.SetResult.REQUIRES_PROMOTE;
}
this.decrementBlockCount(var3);
short var5 = (short)var4;
this.createBlockId(var5, var2);
this.blocks[var1] = var5;
class="kw">return AbstractSectionPalette.SetResult.ADDED_OR_REMOVED;
}
}
class="kw">private int nextInternalId(short var1) {
class="kw">return this.internalIdCount.get(var1) == 1 ? var1 : this.internalIdSet.nextClearBit(0);
}
class="kw">private void createBlockId(short var1, int var2) {
this.internalToExternal.put(var1, var2);
this.externalToInternal.put(var2, var1);
this.internalIdSet.set(var1);
this.internalIdCount.put(var1, (short)1);
}
class="kw">private boolean decrementBlockCount(short var1) {
short var2 = this.internalIdCount.get(var1);
if (var2 == 1) {
this.internalIdCount.remove(var1);
int var3 = this.internalToExternal.remove(var1);
this.externalToInternal.remove(var3);
this.internalIdSet.clear(var1);
class="kw">return true;
} else {
this.internalIdCount.mergeShort(var1, (short)1, NumberUtil::subtract);
class="kw">return false;
}
}
class="kw">private void incrementBlockCount(short var1) {
this.internalIdCount.mergeShort(var1, (short)1, NumberUtil::sum);
}
@Override
class="kw">public boolean contains(int var1) {
class="kw">return this.externalToInternal.containsKey(var1);
}
@Override
class="kw">public boolean containsAny(@Nonnull IntList var1) {
for (int var2 = 0; var2 < var1.size(); var2++) {
if (this.externalToInternal.containsKey(var1.getInt(var2))) {
class="kw">return true;
}
}
class="kw">return false;
}
@Override
class="kw">public int count() {
class="kw">return this.internalIdCount.size();
}
@Override
class="kw">public int count(int var1) {
if (this.externalToInternal.containsKey(var1)) {
short var2 = this.externalToInternal.get(var1);
class="kw">return this.internalIdCount.get(var2);
} else {
class="kw">return 0;
}
}
@Nonnull
@Override
class="kw">public IntSet values() {
class="kw">return new IntOpenHashSet(this.externalToInternal.keySet());
}
@Override
class="kw">public void forEachValue(@Nonnull IntConsumer var1) {
this.externalToInternal.keySet().forEach(var1);
}
@Nonnull
@Override
class="kw">public Int2ShortMap valueCounts() {
Int2ShortMap var1 = new Int2ShortOpenHashMap();
ObjectIterator var2 = this.internalIdCount.short2ShortEntrySet().iterator();
while (var2.hasNext()) {
it.unimi.dsi.fastutil.shorts.Short2ShortMap.Entry var3 = (it.unimi.dsi.fastutil.shorts.Short2ShortMap.Entry)var2.next();
short var4 = var3.getShortKey();
short var5 = var3.getShortValue();
int var6 = this.internalToExternal.get(var4);
var1.put(var6, var5);
}
class="kw">return var1;
}
@Override
class="kw">public boolean shouldDemote() {
class="kw">return this.count() <= 251;
}
@Nonnull
class="kw">public ByteSectionPalette demote() {
class="kw">return ByteSectionPalette.fromShortPalette(this);
}
@Override
class="kw">public AbstractSectionPalette promote() {
throw new UnsupportedOperationException("Short palette cannot be promoted.");
}
class="kw">private boolean isValidInternalId(int var1) {
class="kw">return (var1 & 65535) == var1;
}
@Override
class="kw">public void find(@Nonnull IntList var1, @Nonnull IntConsumer var2) {
ShortSet var3 = this.buildInternalShortSet(var1);
if (!var3.isEmpty()) {
int var4 = 0;
short var5 = this.blocks[0];
while (var4 < 32768) {
int var6 = var4;
short var7 = var5;
do {
var4++;
} while (var4 < 32768 && (var5 = this.blocks[var4]) == var7);
if (var3.contains(var7)) {
for (int var8 = var6; var8 < var4; var8++) {
var2.accept(var8);
}
}
}
}
}
@Override
class="kw">public void find(@Nonnull IntList var1, @Nonnull BiIntConsumer var2) {
ShortSet var3 = this.buildInternalShortSet(var1);
if (!var3.isEmpty()) {
int var4 = 0;
short var5 = this.blocks[0];
while (var4 < 32768) {
int var6 = var4;
short var7 = var5;
do {
var4++;
} while (var4 < 32768 && (var5 = this.blocks[var4]) == var7);
if (var3.contains(var7)) {
int var8 = this.internalToExternal.get(var7);
for (int var9 = var6; var9 < var4; var9++) {
var2.accept(var9, var8);
}
}
}
}
}
class="kw">private ShortSet buildInternalShortSet(IntList var1) {
ShortSet var2 = PaletteSetProvider.get().getShortSet(var1.size());
for (int var3 = 0; var3 < var1.size(); var3++) {
short var4 = this.externalToInternal.getOrDefault(var1.getInt(var3), (short)-32768);
if (var4 != -32768) {
var2.add(var4);
}
}
class="kw">return var2;
}
@Override
class="kw">public int serializedPacketByteSize() {
class="kw">return 2 + 8 * this.internalToExternal.size() + this.blocks.length * 2;
}
@Override
class="kw">public int serializeForPacket(MemorySegment var1, int var2) {
int var3 = var2;
var1.set(MemorySegmentUtil.SHORT_LE, var3, (short)this.internalToExternal.size());
var3 += 2;
for (ObjectIterator var4 = this.internalToExternal.short2IntEntrySet().iterator(); var4.hasNext(); var3 += 8) {
it.unimi.dsi.fastutil.shorts.Short2IntMap.Entry var5 = (it.unimi.dsi.fastutil.shorts.Short2IntMap.Entry)var4.next();
short var6 = var5.getShortKey();
int var7 = var5.getIntValue();
var1.set(MemorySegmentUtil.SHORT_LE, var3, var6);
var1.set(MemorySegmentUtil.INT_LE, var3 + 2, var7);
var1.set(MemorySegmentUtil.SHORT_LE, var3 + 2 + 4, this.internalIdCount.get(var6));
}
MemorySegment.copy(this.blocks, 0, var1, MemorySegmentUtil.SHORT_LE, var3, this.blocks.length);
var3 += this.blocks.length * 2;
class="kw">return var3 - var2;
}
@Override
class="kw">public int serializedByteSize(AbstractSectionPalette.KeyMemorySerializer var1) {
int var2 = 2 + 4 * this.internalToExternal.size() + this.blocks.length * 2;
IntIterator var3 = this.internalToExternal.values().iterator();
while (var3.hasNext()) {
int var4 = (Integer)var3.next();
var2 += var1.keySize(var4);
}
class="kw">return var2;
}
@Override
class="kw">public int serialize(AbstractSectionPalette.KeyMemorySerializer var1, MemorySegment var2, int var3) {
int var4 = var3;
var2.set(MemorySegmentUtil.SHORT_BE, var4, (short)this.internalToExternal.size());
var4 += 2;
ObjectIterator var5 = this.internalToExternal.short2IntEntrySet().iterator();
while (var5.hasNext()) {
it.unimi.dsi.fastutil.shorts.Short2IntMap.Entry var6 = (it.unimi.dsi.fastutil.shorts.Short2IntMap.Entry)var5.next();
short var7 = var6.getShortKey();
int var8 = var6.getIntValue();
var2.set(MemorySegmentUtil.SHORT_BE, var4, var7);
var4 += 2 + var1.serialize(var2, var4 + 2, var8);
var2.set(MemorySegmentUtil.SHORT_BE, var4, this.internalIdCount.get(var7));
var4 += 2;
}
MemorySegment.copy(this.blocks, 0, var2, MemorySegmentUtil.SHORT_BE, var4, this.blocks.length);
var4 += this.blocks.length * 2;
class="kw">return var4 - var3;
}
@Override
class="kw">public int deserialize(AbstractSectionPalette.KeyMemoryDeserializer var1, MemorySegment var2, int var3) {
int var4 = var3;
this.externalToInternal.clear();
this.internalToExternal.clear();
this.internalIdSet.clear();
this.internalIdCount.clear();
Short2ShortMap var5 = null;
int var6 = var2.get(MemorySegmentUtil.SHORT_BE, var4);
var4 += 2;
for (int var7 = 0; var7 < var6; var7++) {
short var8 = var2.get(MemorySegmentUtil.SHORT_BE, var4);
var4 += 2;
int var9 = var1.deserialize(var2, var4);
var4 += var1.keySize(var2, var4);
short var10 = var2.get(MemorySegmentUtil.SHORT_BE, var4);
var4 += 2;
if (this.externalToInternal.containsKey(var9)) {
short var11 = this.externalToInternal.get(var9);
if (var5 == null) {
var5 = new Short2ShortOpenHashMap();
}
var5.put(var8, var11);
this.internalIdCount.mergeShort(var11, var10, NumberUtil::sum);
} else {
this.externalToInternal.put(var9, var8);
this.internalToExternal.put(var8, var9);
this.internalIdSet.set(var8);
this.internalIdCount.put(var8, var10);
}
}
MemorySegment.copy(var2, MemorySegmentUtil.SHORT_BE, var4, this.blocks, 0, this.blocks.length);
var4 += (int)(this.blocks.length * MemorySegmentUtil.SHORT_BE.byteSize());
if (var5 != null) {
for (int var16 = 0; var16 < 32768; var16++) {
short var17 = this.blocks[var16];
if (var5.containsKey(var17)) {
this.blocks[var16] = var5.get(var17);
}
}
}
class="kw">return var4 - var3;
}
@Nonnull
class="kw">public class="kw">static ShortSectionPalette fromBytePalette(@Nonnull ByteSectionPalette var0) {
Int2ShortMap var1 = new Int2ShortOpenHashMap(var0.count());
Short2IntMap var2 = new Short2IntOpenHashMap(var0.count());
BitSet var3 = new BitSet(var0.count());
Short2ShortMap var4 = new Short2ShortOpenHashMap(var0.count());
ObjectIterator var5 = var0.internalToExternal.byte2IntEntrySet().iterator();
while (var5.hasNext()) {
it.unimi.dsi.fastutil.bytes.Byte2IntMap.Entry var6 = (it.unimi.dsi.fastutil.bytes.Byte2IntMap.Entry)var5.next();
short var7 = (short)(var6.getByteKey() & 0xFF);
int var8 = var6.getIntValue();
var2.put(var7, var8);
var1.put(var8, var7);
var3.set(var7);
var4.put(var7, var0.internalIdCount.get(var6.getByteKey()));
}
short[] var9 = new short[32768];
for (int var10 = 0; var10 < 32768; var10++) {
var9[var10] = (short)(var0.blocks[var10] & 0xFF);
}
class="kw">return new ShortSectionPalette(var1, var2, var3, var4, var9);
}
}