From abbcc3915fa783c648436ef52e15da923a246dd1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 26 Mar 2016 09:27:45 +0000 Subject: Lazily combine warnings in results --- .../mammoth/internal/results/InternalResult.java | 49 ++++++++++++++-------- 1 file changed, 31 insertions(+), 18 deletions(-) (limited to 'src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java') diff --git a/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java b/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java index 6ca3377..35c195d 100644 --- a/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java +++ b/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java @@ -1,8 +1,7 @@ package org.zwobble.mammoth.internal.results; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; +import org.zwobble.mammoth.Result; import org.zwobble.mammoth.internal.documents.Style; import java.util.List; @@ -11,17 +10,16 @@ import java.util.Set; import java.util.function.BiFunction; import java.util.function.Function; -import static org.zwobble.mammoth.internal.util.MammothSets.set; +import static org.zwobble.mammoth.internal.util.MammothIterables.lazyConcat; +import static org.zwobble.mammoth.internal.util.MammothIterables.lazyFlatMap; +import static org.zwobble.mammoth.internal.util.MammothLists.eagerMap; +import static org.zwobble.mammoth.internal.util.MammothLists.list; -public class InternalResult implements org.zwobble.mammoth.Result { +public class InternalResult { public static InternalResult> concat(Iterable> results) { - ImmutableList.Builder elements = ImmutableList.builder(); - ImmutableSet.Builder warnings = ImmutableSet.builder(); - for (InternalResult result : results) { - elements.add(result.value); - warnings.addAll(result.warnings); - } - return new InternalResult<>(elements.build(), warnings.build()); + return new InternalResult<>( + eagerMap(results, result -> result.value), + lazyFlatMap(results, result -> result.warnings)); } public static InternalResult map( @@ -31,21 +29,21 @@ public class InternalResult implements org.zwobble.mammoth.Result { { return new InternalResult<>( function.apply(first.value, second.value), - Sets.union(first.warnings, second.warnings).immutableCopy()); + lazyConcat(first.warnings, second.warnings)); } public static InternalResult> empty() { - return new InternalResult<>(Optional.empty(), set()); + return new InternalResult<>(Optional.empty(), list()); } public static InternalResult success(T value) { - return new InternalResult<>(value, set()); + return new InternalResult<>(value, list()); } private final T value; - private final Set warnings; + private final Iterable warnings; - public InternalResult(T value, Set warnings) { + public InternalResult(T value, Iterable warnings) { this.value = value; this.warnings = warnings; } @@ -54,7 +52,7 @@ public class InternalResult implements org.zwobble.mammoth.Result { return value; } - public Set getWarnings() { + public Iterable getWarnings() { return warnings; } @@ -66,6 +64,21 @@ public class InternalResult implements org.zwobble.mammoth.Result { InternalResult intermediateResult = function.apply(value); return new InternalResult<>( intermediateResult.value, - Sets.union(warnings, intermediateResult.warnings).immutableCopy()); + lazyConcat(warnings, intermediateResult.warnings)); + } + + public Result toResult() { + Set warnings = ImmutableSet.copyOf(this.warnings); + return new Result() { + @Override + public T getValue() { + return value; + } + + @Override + public Set getWarnings() { + return warnings; + } + }; } } -- cgit v1.2.3