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;
   }
}