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);
   }
}