Data class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.workerindexer

Файл: com/hypixel/hytale/builtin/hytalegenerator/workerindexer/WorkerIndexer.java

Поля (3)

МодификаторыТипИмя
private T[] data
private Supplier<T> initialize
WorkerIndexer.Id var3

Методы (8)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid thread id " + var1)
for for(int var2 = 0; var2 < this.data.length; var2++)
public void forEachpublic void forEach(@Nonnull BiConsumer<WorkerIndexer.Id, T> var1)
public T getpublic T get(@Nonnull WorkerIndexer.Id var1)
if if(this.data[var1.id] == null)
public boolean isValidpublic boolean isValid(@Nonnull WorkerIndexer.Id var1)
public void setpublic void set(@Nonnull WorkerIndexer.Id var1, T var2)
abstract this this(var1.data.length, var2)

Исходный код

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

class="kw">import java.util.ArrayList;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;

class="kw">public class WorkerIndexer {
   class="kw">private class="kw">final int workerCount;
   @Nonnull
   class="kw">private class="kw">final List<WorkerIndexer.Id> ids;

   class="kw">public WorkerIndexer(int var1) {
      if (var1 <= 0) {
         throw new IllegalArgumentException("workerCount must be > 0");
      }

      this.workerCount = var1;
      List var2 = new ArrayList<>(var1);

      for (int var3 = 0; var3 < var1; var3++) {
         var2.add(new WorkerIndexer.Id(var3));
      }

      this.ids = Collections.unmodifiableList(var2);
   }

   class="kw">public int getWorkerCount() {
      class="kw">return this.workerCount;
   }

   @Nonnull
   class="kw">public List<WorkerIndexer.Id> getWorkedIds() {
      class="kw">return this.ids;
   }

   @Nonnull
   class="kw">public WorkerIndexer.Session createSession() {
      class="kw">return new WorkerIndexer.Session();
   }

   class="kw">public class="kw">static class Data<T> {
      class="kw">private T[] data;
      class="kw">private Supplier<T> initialize;

      class="kw">public Data(int var1, @Nonnull Supplier<T> var2) {
         this.data = (T[])(new Object[var1]);
         this.initialize = var2;
      }

      class="kw">public Data(@Nonnull WorkerIndexer.Data<?> var1, @Nonnull Supplier<T> var2) {
         this(var1.data.length, var2);
      }

      class="kw">public Data(@Nonnull WorkerIndexer var1, @Nonnull Supplier<T> var2) {
         this(var1.getWorkerCount(), var2);
      }

      class="kw">public boolean isValid(@Nonnull WorkerIndexer.Id var1) {
         class="kw">return var1 != null && var1.id < this.data.length && var1.id >= 0;
      }

      @Nonnull
      class="kw">public T get(@Nonnull WorkerIndexer.Id var1) {
         if (!this.isValid(var1)) {
            throw new IllegalArgumentException("Invalid thread id " + var1);
         }

         if (this.data[var1.id] == null) {
            this.data[var1.id] = this.initialize.get();
            assert this.data[var1.id] != null;
         }

         class="kw">return this.data[var1.id];
      }

      class="kw">public void set(@Nonnull WorkerIndexer.Id var1, T var2) {
         if (!this.isValid(var1)) {
            throw new IllegalArgumentException("Invalid thread id " + var1);
         }

         this.data[var1.id] = var2;
      }

      class="kw">public void forEach(@Nonnull BiConsumer<WorkerIndexer.Id, T> var1) {
         for (int var2 = 0; var2 < this.data.length; var2++) {
            WorkerIndexer.Id var3 = new WorkerIndexer.Id(var2);
            var1.accept(var3, this.data[var2]);
         }
      }
   }

   class="kw">public class="kw">static class Id {
      class="kw">public class="kw">static class="kw">final int UNKNOWN_THREAD_ID = -1;
      class="kw">public class="kw">static class="kw">final int MAIN_THREAD_ID = 0;
      @Nonnull
      class="kw">public class="kw">static class="kw">final WorkerIndexer.Id UNKNOWN = new WorkerIndexer.Id(-1);
      @Nonnull
      class="kw">public class="kw">static class="kw">final WorkerIndexer.Id MAIN = new WorkerIndexer.Id(0);
      class="kw">public class="kw">final int id;

      class="kw">private Id(int var1) {
         this.id = var1;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return String.valueOf(this.id);
      }
   }

   class="kw">public class Session {
      class="kw">private int index = 0;

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

      class="kw">public WorkerIndexer.Id next() {
         if (this.index >= WorkerIndexer.this.workerCount) {
            throw new IllegalStateException("worker count exceeded");
         } else {
            class="kw">return WorkerIndexer.this.ids.get(this.index++);
         }
      }

      class="kw">public boolean hasNext() {
         class="kw">return this.index < WorkerIndexer.this.workerCount;
      }
   }
}