Session class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.workerindexer
Файл: com/hypixel/hytale/builtin/hytalegenerator/workerindexer/WorkerIndexer.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private int |
index |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("worker count exceeded") |
|
public boolean |
hasNextpublic boolean hasNext() |
|
|
if if(this.index >= WorkerIndexer.this.workerCount) |
|
public WorkerIndexer.Id |
nextpublic WorkerIndexer.Id next() |
Исходный код
Показать/скрыть
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;
}
}
}