WeightedMapCodec class

Пакет: com.hypixel.hytale.server.core.codec

Файл: com/hypixel/hytale/server/core/codec/WeightedMapCodec.java

implements: Codec<IWeightedMap<T>>, WrappedCodec<T>

Поля (10)

МодификаторыТипИмя
final Codec<T> codec
ArraySchema var2
BsonArray var3
BsonArray var3
WeightedMap.Builder var3
WeightedMap.Builder var4
int var4
IWeightedElement var5
BsonValue var6
IWeightedElement var7

Методы (6)

МодификаторыВозвратСигнатура
abstract throw new CodecExceptionthrow new CodecException("Failed to decode", var6, var2, var11)
abstract throw new CodecExceptionthrow new CodecException("Failed to decode", var1, var2, var9)
public IWeightedMap<T> decodeIWeightedMap<T> decode(@Nonnull BsonValue var1, @Nonnull ExtraInfo var2)
public IWeightedMap<T> decodeJsonIWeightedMap<T> decodeJson(@Nonnull RawJsonReader var1, @Nonnull ExtraInfo var2)
abstract for for(int var5 = 0; var5 < var3.size()
while while(true)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.codec;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.WrappedCodec;
class="kw">import com.hypixel.hytale.codec.exception.CodecException;
class="kw">import com.hypixel.hytale.codec.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.ArraySchema;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import com.hypixel.hytale.common.map.IWeightedElement;
class="kw">import com.hypixel.hytale.common.map.IWeightedMap;
class="kw">import com.hypixel.hytale.common.map.WeightedMap;
class="kw">import java.io.IOException;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonValue;

class="kw">public class WeightedMapCodec<T class="kw">extends IWeightedElement> class="kw">implements Codec<IWeightedMap<T>>, WrappedCodec<T> {
   class="kw">private class="kw">final Codec<T> codec;
   class="kw">private class="kw">final T[] emptyKeys;

   class="kw">public WeightedMapCodec(Codec<T> var1, T[] var2) {
      this.codec = var1;
      this.emptyKeys = var2;
   }

   @Override
   class="kw">public Codec<T> getChildCodec() {
      class="kw">return this.codec;
   }

   class="kw">public IWeightedMap<T> decode(@Nonnull BsonValue var1, @Nonnull ExtraInfo var2) {
      BsonArray var3 = var1.asArray();
      WeightedMap.Builder var4 = WeightedMap.builder(this.emptyKeys);
      var4.ensureCapacity(var3.size());

      for (int var5 = 0; var5 < var3.size(); var5++) {
         BsonValue var6 = var3.get(var5);
         var2.pushIntKey(var5);

         try {
            IWeightedElement var7 = this.codec.decode(var6, var2);
            var4.put(var7, var7.getWeight());
         } catch (Exception var11) {
            throw new CodecException("Failed to decode", var6, var2, var11);
         } class="kw">finally {
            var2.popKey();
         }
      }

      class="kw">return var4.build();
   }

   @Nonnull
   class="kw">public BsonValue encode(@Nonnull IWeightedMap<T> var1, ExtraInfo var2) {
      BsonArray var3 = new BsonArray();
      var1.forEach(var3x -> var3.add(this.codec.encode(var3x, var2)));
      class="kw">return var3;
   }

   class="kw">public IWeightedMap<T> decodeJson(@Nonnull RawJsonReader var1, @Nonnull ExtraInfo var2) class="kw">throws IOException {
      var1.expect('[');
      var1.consumeWhiteSpace();
      WeightedMap.Builder var3 = WeightedMap.builder(this.emptyKeys);
      if (var1.tryConsume(']')) {
         class="kw">return var3.build();
      }

      int var4 = 0;

      while (true) {
         var2.pushIntKey(var4, var1);

         try {
            IWeightedElement var5 = this.codec.decodeJson(var1, var2);
            var3.put(var5, var5.getWeight());
         } catch (Exception var9) {
            throw new CodecException("Failed to decode", var1, var2, var9);
         } class="kw">finally {
            var2.popKey();
         }

         var1.consumeWhiteSpace();
         if (var1.tryConsumeOrExpect(']', ',')) {
            class="kw">return var3.build();
         }

         var1.consumeWhiteSpace();
      }
   }

   @Nonnull
   @Override
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
      ArraySchema var2 = new ArraySchema();
      var2.setTitle("WeightedMap");
      var2.setItem(var1.refDefinition(this.codec));
      class="kw">return var2;
   }
}