package tc.oc.pgm.points;
import java.util.Collection;
import java.util.List;
import com.google.common.collect.ImmutableList;
import tc.oc.commons.core.inspect.Inspectable;
import tc.oc.commons.core.util.Lazy;
import tc.oc.pgm.regions.Region;
import tc.oc.pgm.regions.Union;
public abstract class AggregatePointProvider extends Inspectable.Impl implements PointProvider {
protected final @Inspect List<PointProvider> children;
private final @Inspect Lazy<Region> region;
public AggregatePointProvider(Collection<? extends PointProvider> children) {
this.children = ImmutableList.copyOf(children);
region = Lazy.from(() -> Union.of(children.stream().map(PointProvider::getRegion)));
}
@Override
public int getWeight() {
return children.stream().mapToInt(PointProvider::getWeight).sum();
}
@Override
public Region getRegion() {
return region.get();
}
protected boolean allChildrenCanFail() {
return children.stream().allMatch(PointProvider::canFail);
}
protected boolean anyChildrenCanFail() {
return children.stream().anyMatch(PointProvider::canFail);
}
}