State enum

Пакет: com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers

Файл: com/hypixel/hytale/builtin/hytalegenerator/engine/bufferbundle/buffers/SimplePixelBuffer.java

Поля (1)

МодификаторыТипИмя
EMPTY, SINGLE_VALUE, ARRAY

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers;

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.ArrayUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.performanceinstruments.MemInstrument;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import java.util.Arrays;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class SimplePixelBuffer<T> class="kw">extends PixelBuffer<T> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Bounds3i bounds = new Bounds3i(Vector3iUtil.ZERO, SIZE);
   @Nonnull
   class="kw">private class="kw">final Class<T> pixelType;
   @Nonnull
   class="kw">private SimplePixelBuffer.State state;
   @Nullable
   class="kw">private SimplePixelBuffer.ArrayContents<T> arrayContents;
   @Nullable
   class="kw">private T singleValue;

   class="kw">public SimplePixelBuffer(@Nonnull Class<T> var1) {
      this.pixelType = var1;
      this.state = SimplePixelBuffer.State.EMPTY;
      this.arrayContents = null;
      this.singleValue = null;
   }

   class="kw">private class="kw">static int index(@Nonnull Vector3i var0) {
      class="kw">return var0.y + var0.x * SIZE.y + var0.z * SIZE.y * SIZE.x;
   }

   @Nullable
   @Override
   class="kw">public T getPixelContent(@Nonnull Vector3i var1) {
      assert bounds.contains(var1);

      class="kw">return (T)(class="kw">switch (this.state) {
         case SINGLE_VALUE -> this.singleValue;
         case ARRAY -> this.arrayContents.array[index(var1)];
         class="kw">default -> null;
      });
   }

   @Override
   class="kw">public void setPixelContent(@Nonnull Vector3i var1, @Nullable T var2) {
      assert bounds.contains(var1);
      class="kw">switch (this.state) {
         case SINGLE_VALUE:
            if (this.singleValue == var2) {
               class="kw">return;
            }

            this.switchFromSingleValueToArray();
            this.setPixelContent(var1, var2);
            break;
         case ARRAY:
            this.arrayContents.array[index(var1)] = var2;
            break;
         class="kw">default:
            this.state = SimplePixelBuffer.State.SINGLE_VALUE;
            this.singleValue = var2;
      }
   }

   @Nonnull
   @Override
   class="kw">public Class<T> getPixelType() {
      class="kw">return this.pixelType;
   }

   class="kw">public void copyFrom(@Nonnull SimplePixelBuffer<T> var1) {
      this.state = var1.state;
      class="kw">switch (this.state) {
         case SINGLE_VALUE:
            this.singleValue = var1.singleValue;
            break;
         case ARRAY:
            this.arrayContents = new SimplePixelBuffer.ArrayContents<>();
            ArrayUtil.copy(var1.arrayContents.array, this.arrayContents.array);
            break;
         class="kw">default:
            class="kw">return;
      }
   }

   @Nonnull
   @Override
   class="kw">public MemInstrument.Report getMemoryUsage() {
      long var1 = 128L;
      if (this.arrayContents != null) {
         var1 += this.arrayContents.getMemoryUsage().size_bytes();
      }

      class="kw">return new MemInstrument.Report(var1);
   }

   class="kw">private void ensureContents() {
      if (this.arrayContents == null) {
         this.arrayContents = new SimplePixelBuffer.ArrayContents<>();
      }
   }

   class="kw">private void switchFromSingleValueToArray() {
      assert this.state == SimplePixelBuffer.State.SINGLE_VALUE;
      this.state = SimplePixelBuffer.State.ARRAY;
      this.arrayContents = new SimplePixelBuffer.ArrayContents<>();
      Arrays.fill(this.arrayContents.array, this.singleValue);
      this.singleValue = null;
   }

   class="kw">public class="kw">static class ArrayContents<T> class="kw">implements MemInstrument {
      @Nonnull
      class="kw">private class="kw">final T[] array = (T[])(new Object[PixelBuffer.SIZE.x * PixelBuffer.SIZE.y * PixelBuffer.SIZE.z]);

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

      @Nonnull
      @Override
      class="kw">public MemInstrument.Report getMemoryUsage() {
         long var1 = 16L + 8L * this.array.length;
         class="kw">return new MemInstrument.Report(var1);
      }
   }

   class="kw">private enum State {
      EMPTY,
      SINGLE_VALUE,
      ARRAY;

      State() {
      }
   }
}