implement Bifunctor Pair

This commit is contained in:
dfsek
2026-01-01 20:15:05 -07:00
parent 47bdd66fe7
commit 86bb4d5a1a
17 changed files with 29 additions and 30 deletions

View File

@@ -8,8 +8,8 @@ import org.jetbrains.annotations.ApiStatus.Experimental;
import com.dfsek.terra.api.util.cache.DoubleSeededVector2Key;
import com.dfsek.terra.api.util.cache.DoubleSeededVector3Key;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.pair.Pair.Mutable;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair.Mutable;
import static com.dfsek.terra.api.util.cache.CacheUtils.CACHE_EXECUTOR;

View File

@@ -61,7 +61,7 @@ import com.dfsek.terra.addons.terrascript.parser.lang.variables.reference.StrVar
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
import com.dfsek.terra.addons.terrascript.tokenizer.Token;
import com.dfsek.terra.addons.terrascript.tokenizer.Tokenizer;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
@SuppressWarnings("unchecked")

View File

@@ -5,7 +5,7 @@ import java.util.HashMap;
import java.util.Map;
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable.ReturnType;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
public class Scope {

View File

@@ -17,7 +17,7 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Keyword;
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
import com.dfsek.terra.addons.terrascript.parser.lang.Scope;
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
public class IfKeyword implements Keyword<Block.ReturnInfo<?>> {

View File

@@ -5,7 +5,9 @@
* reference the LICENSE file in the common/api directory.
*/
package com.dfsek.terra.api.util.generic.pair;
package com.dfsek.terra.api.util.generic.data.types;
import com.dfsek.terra.api.util.generic.data.BiFunctor;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
@@ -17,15 +19,15 @@ import java.util.function.Function;
import java.util.function.Predicate;
public record Pair<L, R>(L left, R right) implements Bifunctor{
public record Pair<L, R>(L left, R right) implements BiFunctor<L, R, Pair<?, ?>> {
private static final Pair<?, ?> NULL = new Pair<>(null, null);
public static <L, R, T> Function<Pair<L, R>, Pair<T, R>> mapLeft(Function<L, T> function) {
return pair -> of(function.apply(pair.left), pair.right);
public <T> Pair<T, R> mapLeft(Function<L, T> function) {
return of(function.apply(left), right);
}
public static <L, R, T> Function<Pair<L, R>, Pair<L, T>> mapRight(Function<R, T> function) {
return pair -> of(pair.left, function.apply(pair.right));
public <T> Pair<L, T> mapRight(Function<R, T> function) {
return of(left, function.apply(right));
}
public static <L> Predicate<Pair<L, ?>> testLeft(Predicate<L> predicate) {

View File

@@ -6,13 +6,11 @@ import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.github.benmanes.caffeine.cache.Scheduler;
import java.util.Optional;
import com.dfsek.terra.api.Handle;
import com.dfsek.terra.api.util.cache.SeededVector2Key;
import com.dfsek.terra.api.util.cache.SeededVector3Key;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.pair.Pair.Mutable;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair.Mutable;
import com.dfsek.terra.api.world.biome.Biome;
import static com.dfsek.terra.api.util.cache.CacheUtils.CACHE_EXECUTOR;

View File

@@ -10,7 +10,7 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.mutable.MutableInteger;
import static org.junit.jupiter.api.Assertions.*;

View File

@@ -64,7 +64,7 @@ import com.dfsek.terra.api.profiler.Profiler;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.registry.key.StringIdentifiable;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.mutable.MutableBoolean;
import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.config.GenericLoaders;
@@ -308,7 +308,7 @@ public abstract class AbstractPlatform implements Platform {
.walk(addonsPath)
.map(path -> Pair.of(path, data.relativize(path).toString()))
.map(Pair.mapRight(s -> {
.map(p -> p.mapRight(s -> {
if(s.contains("+")) { // remove commit hash
return s.substring(0, s.lastIndexOf('+'));
}
@@ -316,17 +316,17 @@ public abstract class AbstractPlatform implements Platform {
}))
.filter(Pair.testRight(s -> s.contains("."))) // remove patch version
.map(Pair.mapRight(s -> s.substring(0, s.lastIndexOf('.'))))
.map(p -> p.mapRight(s -> s.substring(0, s.lastIndexOf('.'))))
.filter(Pair.testRight(s -> s.contains("."))) // remove minor version
.map(Pair.mapRight(s -> s.substring(0, s.lastIndexOf('.'))))
.map(p -> p.mapRight(s -> s.substring(0, s.lastIndexOf('.'))))
.collect(Collectors.toSet());
Set<String> pathsNoMajor = paths
.stream()
.filter(Pair.testRight(s -> s.contains(".")))
.map(Pair.mapRight(s -> s.substring(0, s.lastIndexOf('.')))) // remove major version
.map(p -> p.mapRight(s -> s.substring(0, s.lastIndexOf('.')))) // remove major version
.map(Pair.unwrapRight())
.collect(Collectors.toSet());

View File

@@ -71,7 +71,7 @@ import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.api.tectonic.ShortcutLoader;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.reflection.ReflectionUtil;
import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;

View File

@@ -34,7 +34,7 @@ import java.util.Optional;
import java.util.Set;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
public class MetaListLikePreprocessor extends MetaPreprocessor<Meta> {

View File

@@ -33,7 +33,7 @@ import java.util.Map;
import java.util.Optional;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.reflection.TypeKey;

View File

@@ -25,7 +25,7 @@ import com.dfsek.tectonic.api.preprocessor.ValuePreprocessor;
import java.lang.annotation.Annotation;
import java.util.Map;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
public abstract class MetaPreprocessor<A extends Annotation> implements ValuePreprocessor<A> {

View File

@@ -27,7 +27,7 @@ import java.lang.reflect.AnnotatedType;
import java.util.Map;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
public class MetaValuePreprocessor extends MetaPreprocessor<Meta> {

View File

@@ -44,7 +44,7 @@ import java.util.stream.Collectors;
import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.reflection.TypeKey;

View File

@@ -23,7 +23,7 @@ import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.entity.Entity;
import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.world.ServerWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator;

View File

@@ -8,7 +8,6 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.world.ServerWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator;

View File

@@ -27,7 +27,7 @@ import java.util.Locale;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.MetaPack;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import com.dfsek.terra.api.util.range.ConstantRange;
import com.dfsek.terra.mod.ModPlatform;
import com.dfsek.terra.mod.config.VanillaWorldProperties;