StringTreeMap class
Пакет: com.hypixel.hytale.codec.builder
Файл: com/hypixel/hytale/codec/builder/StringTreeMap.java
Поля (23)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
STRING_PART_SIZE |
|
ObjectIterator |
var2 |
|
int |
var2 |
|
Entry |
var3 |
|
StringTreeMap |
var3 |
|
int |
var3 |
|
int |
var3 |
|
long |
var4 |
|
char |
var4 |
|
String |
var5 |
|
long |
var5 |
|
char |
var5 |
|
Object |
var6 |
|
StringTreeMap |
var6 |
|
long |
var6 |
|
String |
var7 |
|
int |
var7 |
|
int |
var7 |
|
Object |
var8 |
|
StringTreeMap |
var8 |
|
char |
var8 |
|
long |
var9 |
|
char |
var9 |
Методы (29)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Keys don't match: " + this.key + " != " + var1) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Incorrectly built tree!") |
private |
StringTreeMap<V> |
consumeEntryKeyStringTreeMap<V> consumeEntryKey(@Nonnull RawJsonReader var1, StringTreeMap<V> var2, int var3, int var4, @Nonnull StringTreeMap<V> var5) |
protected |
StringTreeMap<V> |
findEntry0StringTreeMap<V> findEntry0(@Nonnull RawJsonReader var1, StringTreeMap<V> var2, int var3, int var4) |
public |
StringTreeMap<V> |
findEntryOrDefaultStringTreeMap<V> findEntryOrDefault(@Nonnull RawJsonReader var1, StringTreeMap<V> var2) |
|
|
if if(var1.map != null) |
|
|
if if(var3 < var4) |
|
|
if if(this.map == null) |
|
|
if if(this.map == null) |
|
|
if if(this.key != null) |
|
|
if if(var6 != null) |
|
|
if if(var7 >= var3) |
|
|
if if(var6.map == null) |
|
|
if if(var6.key == null) |
|
|
if if(this.map == null) |
|
|
if if(this.key == null) |
|
|
if if(var8 == null) |
|
|
if if(var7 != 0) |
|
|
if if(var8.map == null) |
|
|
if if(var8.key == null) |
|
|
if if(var3 == 1) |
|
|
if if(var3 == 2) |
|
|
if if(var3 == 3) |
public |
void |
putvoid put(@Nonnull String var1, V var2) |
private |
void |
put0void put0(@Nonnull String var1, V var2, int var3, int var4) |
public |
void |
putAllvoid putAll(@Nonnull Map<String, V> var1) |
static |
long |
readStringPartAsLonglong readStringPartAsLong(@Nonnull String var0, int var1, int var2) |
public |
void |
removevoid remove(@Nonnull String var1) |
protected |
void |
remove0void remove0(@Nonnull String var1, int var2, int var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.codec.builder;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.io.IOException;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class StringTreeMap<V> {
class="kw">public class="kw">static class="kw">final int STRING_PART_SIZE = 4;
class="kw">private Long2ObjectMap<StringTreeMap<V>> map;
@Nullable
class="kw">private String key;
@Nullable
class="kw">private V value;
class="kw">public StringTreeMap() {
}
class="kw">public StringTreeMap(@Nonnull StringTreeMap<V> var1) {
if (var1.map != null) {
this.map = new Long2ObjectOpenHashMap(var1.map.size());
ObjectIterator var2 = var1.map.long2ObjectEntrySet().iterator();
while (var2.hasNext()) {
Entry var3 = (Entry<StringTreeMap<V>>)var2.next();
this.map.put(var3.getLongKey(), new StringTreeMap((StringTreeMap<V>)var3.getValue()));
}
}
this.key = var1.key;
this.value = var1.value;
}
class="kw">public StringTreeMap(@Nonnull Map<String, V> var1) {
this.putAll(var1);
}
@Nullable
class="kw">public String getKey() {
class="kw">return this.key;
}
@Nullable
class="kw">public V getValue() {
class="kw">return this.value;
}
class="kw">public void putAll(@Nonnull Map<String, V> var1) {
for (java.util.Map.Entry var3 : var1.entrySet()) {
this.put(var3.getKey(), var3.getValue());
}
}
class="kw">public void put(@Nonnull String var1, V var2) {
this.put0(var1, var2, 0, var1.length());
}
class="kw">private void put0(@Nonnull String var1, V var2, int var3, int var4) {
if (this.map != null || this.key != null && !this.key.equals(var1)) {
if (var3 < var4) {
long var9 = readStringPartAsLong(var1, var3, var4);
if (this.map == null) {
this.map = new Long2ObjectOpenHashMap();
}
((StringTreeMap)this.map.computeIfAbsent(var9, var0 -> new StringTreeMap())).put0(var1, var2, var3 + 4, var4);
if (this.key != null && this.key.length() > var3) {
String var7 = this.key;
Object var8 = this.value;
this.key = null;
this.value = null;
this.put0(var7, var8, var3, var7.length());
}
} else {
if (this.key != null && this.key.length() > var3) {
String var5 = this.key;
Object var6 = this.value;
this.key = var1;
this.value = var2;
this.put0(var5, var6, var3, var5.length());
} else {
if (this.key != null && !this.key.equals(var1)) {
throw new IllegalStateException("Keys don't match: " + this.key + " != " + var1);
}
this.key = var1;
this.value = var2;
}
}
} else {
this.key = var1;
this.value = var2;
}
}
class="kw">public void remove(@Nonnull String var1) {
if (this.map == null) {
if (this.key != null) {
if (this.key.equals(var1)) {
this.key = null;
this.value = null;
}
}
} else {
this.remove0(var1, 0, var1.length());
}
}
class="kw">protected void remove0(@Nonnull String var1, int var2, int var3) {
long var4 = readStringPartAsLong(var1, var2, var3);
StringTreeMap var6 = (StringTreeMap<V>)this.map.get(var4);
if (var6 != null) {
int var7 = var2 + 4;
if (var7 >= var3) {
if (var1.equals(var6.key)) {
if (var6.map == null) {
this.map.remove(var4);
} else {
var6.key = null;
var6.value = null;
}
}
} else if (var6.map == null) {
if (var6.key == null) {
throw new IllegalStateException("Incorrectly built tree!");
}
if (var6.key.equals(var1)) {
this.map.remove(var4);
}
} else {
var6.remove0(var1, var7, var3);
}
}
}
@Nullable
class="kw">public StringTreeMap<V> findEntry(@Nonnull String var1) {
class="kw">return this.findEntry0(var1, 0);
}
@Nullable
class="kw">private StringTreeMap<V> findEntry0(@Nonnull String var1, int var2) {
if (this.map != null && var2 < var1.length()) {
StringTreeMap var3 = (StringTreeMap<V>)this.map.get(readStringPartAsLong(var1, var2, var1.length()));
class="kw">return var3 == null ? null : var3.findEntry0(var1, var2 + 4);
} else {
class="kw">return var1.equals(this.key) ? this : null;
}
}
@Nullable
class="kw">public StringTreeMap<V> findEntry(@Nonnull RawJsonReader var1) class="kw">throws IOException {
var1.expect('"');
int var2 = var1.findOffset('"');
class="kw">return this.findEntry0(var1, null, 0, var2);
}
class="kw">public StringTreeMap<V> findEntryOrDefault(@Nonnull RawJsonReader var1, StringTreeMap<V> var2) class="kw">throws IOException {
var1.expect('"');
int var3 = var1.findOffset('"');
class="kw">return this.findEntry0(var1, var2, 0, var3);
}
class="kw">protected StringTreeMap<V> findEntry0(@Nonnull RawJsonReader var1, StringTreeMap<V> var2, int var3, int var4) class="kw">throws IOException {
if (this.map == null) {
if (this.key == null) {
var1.skipRemainingString();
class="kw">return var2;
} else {
class="kw">return this.consumeEntryKey(var1, var2, var3, var4, this);
}
} else {
long var5 = var1.readStringPartAsLong(Math.min(var4, 4));
int var7 = Math.max(var4 - 4, 0);
StringTreeMap var8 = (StringTreeMap<V>)this.map.get(var5);
if (var8 == null) {
if (var7 != 0) {
var1.skipRemainingString();
} else {
var1.expect('"');
}
class="kw">return var2;
} else if (var7 != 0) {
if (var8.map == null) {
if (var8.key == null) {
throw new IllegalStateException("Incorrectly built tree!");
} else {
class="kw">return this.consumeEntryKey(var1, var2, var3 + 4, var7, var8);
}
} else {
class="kw">return var8.findEntry0(var1, var2, var3 + 4, var7);
}
} else {
var1.expect('"');
class="kw">return var8.key != null && var8.key.length() == var3 + var4 ? var8 : var2;
}
}
}
class="kw">private StringTreeMap<V> consumeEntryKey(@Nonnull RawJsonReader var1, StringTreeMap<V> var2, int var3, int var4, @Nonnull StringTreeMap<V> var5) class="kw">throws IOException {
if (var5.key.length() != var3 + var4) {
var1.skipRemainingString();
class="kw">return var2;
} else if (!var1.tryConsume(var5.key, var3)) {
var1.skipRemainingString();
class="kw">return var2;
} else if (!var1.tryConsume('"')) {
var1.skipRemainingString();
class="kw">return var2;
} else {
class="kw">return var5;
}
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "StringTreeMap{map=" + this.map + ", key='" + this.key + "', value=" + this.value + "}";
}
class="kw">public class="kw">static long readStringPartAsLong(@Nonnull String var0, int var1, int var2) {
int var3 = var2 - var1;
char var4 = var0.charAt(var1);
if (var3 == 1) {
class="kw">return var4;
}
char var5 = var0.charAt(var1 + 1);
long var6 = var4 | (long)var5 << 16;
if (var3 == 2) {
class="kw">return var6;
}
char var8 = var0.charAt(var1 + 2);
var6 |= (long)var8 << 32;
if (var3 == 3) {
class="kw">return var6;
}
char var9 = var0.charAt(var1 + 3);
class="kw">return var6 | (long)var9 << 48;
}
}