ShortBytePalette class

Пакет: com.hypixel.hytale.server.core.universe.world.chunk.palette

Файл: com/hypixel/hytale/server/core/universe/world/chunk/palette/ShortBytePalette.java

Поля (17)

МодификаторыТипИмя
final int LENGTH
byte[] var1
ShortBytePalette var2
MemorySegment var2
short var2
var2
int var3
short[] var3
var3
short var4
var4
int var5
short var6
var6
short var7
var7
short[] var8

Методы (25)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Can't have more than 32767")
public int byteSizeint byteSize()
public short containsshort contains(short var1)
public void copyFromvoid copyFrom(@Nonnull ShortBytePalette var1)
public int deserializeint deserialize(@Nonnull MemorySegment var1, int var2)
for for(short var2 = 0; var2 < this.keys.length; var2++)
abstract for for(int var3 = 0; var3 < this.array.getLength()
public short getshort get(int var1, int var2)
public short getshort get(int var1)
if if(var4 >= 1024)
if if(var4 >= 0)
if if(var6 >= 1024)
if if(var6 >= 0)
if if(var7 >= 32767)
if if(var7 >= 1024)
if if(var7 >= this.keys.length)
if if(this.keys[var2] == var1)
if if(var3 != var1)
if if(this.count == 0)
private int internalByteSizeint internalByteSize()
public void optimizevoid optimize()
private void optimizevoid optimize(int var1)
public void serializevoid serialize(@Nonnull MemorySegment var1, int var2)
public byte[] serializebyte[] serialize()
public boolean setboolean set(int var1, int var2, short var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.chunk.palette;

class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.MemorySegmentUtil;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.util.concurrent.locks.Lock;
class="kw">import java.util.concurrent.locks.ReentrantLock;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ShortBytePalette {
   class="kw">public class="kw">static class="kw">final int LENGTH = 1024;
   class="kw">private short count = 1;
   class="kw">private class="kw">final Lock keysLock = new ReentrantLock();
   class="kw">private short[] keys = new short[]{0};
   class="kw">private class="kw">final BitFieldArr array = new BitFieldArr(10, 1024);

   class="kw">public ShortBytePalette() {
   }

   class="kw">public ShortBytePalette(short var1) {
      this.keys = new short[]{var1};
   }

   class="kw">public boolean set(int var1, int var2, short var3) {
      short var4 = this.contains(var3);
      int var5 = ChunkUtil.indexColumn(var1, var2);
      if (var4 >= 1024) {
         this.optimize(var5);
         var4 = this.contains(var3);
      }

      if (var4 >= 0) {
         this.array.set(var5, var4);
      } else {
         this.keysLock.lock();

         try {
            short var6 = this.contains(var3);
            if (var6 >= 1024) {
               this.optimize(var5);
               var6 = this.contains(var3);
            }

            if (var6 >= 0) {
               this.array.set(var5, var6);
            } else {
               short var7 = this.count++;
               if (var7 >= 32767) {
                  throw new IllegalArgumentException("Can't have more than 32767");
               }

               if (var7 >= 1024) {
                  this.optimize(var5);
                  var7 = this.count++;
               }

               if (var7 >= this.keys.length) {
                  short[] var8 = new short[var7 + 1];
                  System.arraycopy(this.keys, 0, var8, 0, this.keys.length);
                  this.keys = var8;
               }

               this.keys[var7] = var3;
               this.array.set(var5, var7);
            }
         } class="kw">finally {
            this.keysLock.unlock();
         }
      }

      class="kw">return true;
   }

   class="kw">public short get(int var1, int var2) {
      class="kw">return this.keys[this.array.get(ChunkUtil.indexColumn(var1, var2))];
   }

   class="kw">public short get(int var1) {
      class="kw">return this.keys[this.array.get(var1)];
   }

   class="kw">public short contains(short var1) {
      this.keysLock.lock();

      try {
         for (short var2 = 0; var2 < this.keys.length; var2++) {
            if (this.keys[var2] == var1) {
               class="kw">return var2;
            }
         }
      } class="kw">finally {
         this.keysLock.unlock();
      }

      class="kw">return -1;
   }

   class="kw">public void optimize() {
      this.optimize(-1);
   }

   class="kw">private void optimize(int var1) {
      ShortBytePalette var2 = new ShortBytePalette(this.keys[this.array.get(0)]);

      for (int var3 = 0; var3 < this.array.getLength(); var3++) {
         if (var3 != var1) {
            var2.set(ChunkUtil.xFromColumn(var3), ChunkUtil.zFromColumn(var3), this.keys[this.array.get(var3)]);
         }
      }

      this.keysLock.lock();

      try {
         this.count = var2.count;
         this.keys = var2.keys;
         this.array.set(var2.array.get());
      } class="kw">finally {
         this.keysLock.unlock();
      }
   }

   class="kw">public int byteSize() {
      this.keysLock.lock();

      try {
         class="kw">return this.internalByteSize();
      } class="kw">finally {
         this.keysLock.unlock();
      }
   }

   class="kw">private int internalByteSize() {
      class="kw">return (int)(
         MemorySegmentUtil.SHORT_LE.byteSize()
            + MemorySegmentUtil.SHORT_LE.byteSize() * this.count
            + MemorySegmentUtil.INT_LE.byteSize()
            + this.array.getByteLength()
      );
   }

   class="kw">public void serialize(@Nonnull MemorySegment var1, int var2) {
      this.keysLock.lock();

      try {
         var1.set(MemorySegmentUtil.SHORT_LE, var2, this.count);
         MemorySegment.copy(this.keys, 0, var1, MemorySegmentUtil.SHORT_LE, var2 + MemorySegmentUtil.SHORT_LE.byteSize(), this.count);
         var2 += (int)(MemorySegmentUtil.SHORT_LE.byteSize() + this.count * MemorySegmentUtil.SHORT_LE.byteSize());
         var1.set(MemorySegmentUtil.INT_LE, var2, this.array.getByteLength());
         this.array.copyTo(var1, var2 + MemorySegmentUtil.INT_LE.byteSize());
      } class="kw">finally {
         this.keysLock.unlock();
      }
   }

   class="kw">public int deserialize(@Nonnull MemorySegment var1, int var2) {
      this.keysLock.lock();

      try {
         this.count = var1.get(MemorySegmentUtil.SHORT_LE, var2);
         this.keys = new short[this.count];
         MemorySegment.copy(var1, MemorySegmentUtil.SHORT_LE, var2 + MemorySegmentUtil.SHORT_LE.byteSize(), this.keys, 0, this.count);
         var2 += (int)(MemorySegmentUtil.SHORT_LE.byteSize() + this.count * MemorySegmentUtil.SHORT_LE.byteSize());
         int var3 = var1.get(MemorySegmentUtil.INT_LE, var2);
         this.array.copyFrom(var1, var2 + MemorySegmentUtil.INT_LE.byteSize(), var3);
         if (this.count == 0) {
            this.count = 1;
            this.keys = new short[]{0};
            class="kw">return (int)(MemorySegmentUtil.SHORT_LE.byteSize() + MemorySegmentUtil.INT_LE.byteSize());
         } else {
            class="kw">return this.internalByteSize();
         }
      } class="kw">finally {
         this.keysLock.unlock();
      }
   }

   class="kw">public byte[] serialize() {
      byte[] var1 = new byte[this.byteSize()];
      MemorySegment var2 = MemorySegment.ofArray(var1);
      this.serialize(var2, 0);
      class="kw">return var1;
   }

   class="kw">public void copyFrom(@Nonnull ShortBytePalette var1) {
      var1.keysLock.lock();

      short var2;
      short[] var3;
      try {
         var2 = var1.count;
         var3 = (short[])var1.keys.clone();
      } class="kw">finally {
         var1.keysLock.unlock();
      }

      this.keysLock.lock();

      try {
         this.count = var2;
         this.keys = var3;
         this.array.copyFrom(var1.array);
      } class="kw">finally {
         this.keysLock.unlock();
      }
   }
}