Skip to content

Commit

Permalink
Rebase from upstream and update
Browse files Browse the repository at this point in the history
  • Loading branch information
Gegy committed Jan 20, 2021
1 parent d101a52 commit 4dbb9f2
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 4 deletions.
19 changes: 19 additions & 0 deletions src/main/java/com/mojang/serialization/Codec.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.Stream;
Expand Down Expand Up @@ -574,6 +575,24 @@ public String toString() {
}
};

PrimitiveCodec<DoubleStream> DOUBLE_STREAM = new PrimitiveCodec<DoubleStream>() {
@Override
public <T> DataResult<DoubleStream> read(final DynamicOps<T> ops, final T input) {
return ops
.getDoubleStream(input);
}

@Override
public <T> T write(final DynamicOps<T> ops, final DoubleStream value) {
return ops.createDoubleList(value);
}

@Override
public String toString() {
return "DoubleStream";
}
};

Codec<Dynamic<?>> PASSTHROUGH = new Codec<Dynamic<?>>() {
@Override
public <T> DataResult<Pair<Dynamic<?>, T>> decode(final DynamicOps<T> ops, final T input) {
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/mojang/serialization/Dynamic.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.Stream;
Expand Down Expand Up @@ -108,6 +109,11 @@ public DataResult<LongStream> asLongStreamOpt() {
return ops.getLongStream(value);
}

@Override
public DataResult<DoubleStream> asDoubleStreamOpt() {
return ops.getDoubleStream(value);
}

@Override
public OptionalDynamic<T> get(final String key) {
return new OptionalDynamic<>(ops, ops.getMap(value).flatMap(m -> {
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/mojang/serialization/DynamicLike.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.Stream;
Expand All @@ -38,6 +39,7 @@ public DynamicOps<T> getOps() {
public abstract DataResult<ByteBuffer> asByteBufferOpt();
public abstract DataResult<IntStream> asIntStreamOpt();
public abstract DataResult<LongStream> asLongStreamOpt();
public abstract DataResult<DoubleStream> asDoubleStreamOpt();
public abstract OptionalDynamic<T> get(String key);
public abstract DataResult<T> getGeneric(T key);
public abstract DataResult<T> getElement(String key);
Expand Down Expand Up @@ -148,6 +150,10 @@ public LongStream asLongStream() {
return asLongStreamOpt().result().orElseGet(LongStream::empty);
}

public DoubleStream asDoubleStream() {
return asDoubleStreamOpt().result().orElseGet(DoubleStream::empty);
}

public <U> List<U> asList(final Function<Dynamic<T>, U> deserializer) {
return asListOpt(deserializer).result().orElseGet(ImmutableList::of);
}
Expand Down Expand Up @@ -231,4 +237,8 @@ public Dynamic<?> createIntList(final IntStream input) {
public Dynamic<?> createLongList(final LongStream input) {
return new Dynamic<>(ops, ops.createLongList(input));
}

public Dynamic<?> createDoubleList(final DoubleStream input) {
return new Dynamic<>(ops, ops.createDoubleList(input));
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/mojang/serialization/DynamicOps.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,13 @@ default T createLongList(final LongStream input) {
return createList(input.mapToObj(this::createLong));
}

default Optional<DoubleStream> getDoubleStream(final T input) {
default DataResult<DoubleStream> getDoubleStream(final T input) {
return getStream(input).flatMap(stream -> {
final List<T> list = stream.collect(Collectors.toList());
if (list.stream().allMatch(element -> getNumberValue(element).isPresent())) {
return Optional.of(list.stream().mapToDouble(element -> getNumberValue(element).get().doubleValue()));
if (list.stream().allMatch(element -> getNumberValue(element).result().isPresent())) {
return DataResult.success(list.stream().mapToDouble(element -> getNumberValue(element).result().get().doubleValue()));
}
return Optional.empty();
return DataResult.error("Some elements are not doubles: " + input);
});
}

Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/mojang/serialization/OptionalDynamic.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.nio.ByteBuffer;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.Stream;
Expand Down Expand Up @@ -71,6 +72,11 @@ public DataResult<LongStream> asLongStreamOpt() {
return flatMap(DynamicLike::asLongStreamOpt);
}

@Override
public DataResult<DoubleStream> asDoubleStreamOpt() {
return flatMap(DynamicLike::asDoubleStreamOpt);
}

@Override
public OptionalDynamic<T> get(final String key) {
return new OptionalDynamic<>(ops, delegate.flatMap(k -> k.get(key).delegate));
Expand Down

0 comments on commit 4dbb9f2

Please sign in to comment.