/*******************************************************************************
* Copyright 2014 Felipe Takiyama
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package br.usp.poli.takiyama.common;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import br.usp.poli.takiyama.cfove.StdParfactor;
import br.usp.poli.takiyama.prv.LogicalVariable;
import br.usp.poli.takiyama.prv.Prv;
import br.usp.poli.takiyama.prv.Substitution;
import br.usp.poli.takiyama.prv.Term;
public final class Scanner implements ParfactorDecorator {
private final Parfactor p;
public Scanner(Parfactor p) {
this.p = p;
}
@Override
public Set<LogicalVariable> logicalVariables() {
Set<LogicalVariable> logicalVariables = new HashSet<LogicalVariable>();
for (Prv prv : p.factor().variables()) {
logicalVariables.addAll(prv.parameters());
if (!prv.boundVariable().isEmpty()) {
logicalVariables.add(prv.boundVariable());
}
}
return logicalVariables;
}
// Everything else is delegation.
@Override
public Set<Constraint> constraints() {
return p.constraints();
}
@Override
public Factor factor() {
return p.factor();
}
@Override
public List<Prv> prvs() {
return p.prvs();
}
@Override
public int size() {
return p.size();
}
@Override
public Parfactor apply(Substitution s) {
return p.apply(s);
}
@Override
public boolean contains(Prv prv) {
return p.contains(prv);
}
@Override
public boolean isConstant() {
return p.isConstant();
}
@Override
public boolean isCountable(LogicalVariable lv) {
return p.isCountable(lv);
}
@Override
public boolean isExpandable(Prv cf, Substitution s) {
return p.isExpandable(cf, s);
}
@Override
public boolean isMultipliable(Parfactor other) {
return p.isMultipliable(other);
}
@Override
public boolean isSplittable(Substitution s) {
return p.isSplittable(s);
}
@Override
public boolean isEliminable(Prv prv) {
return p.isEliminable(prv);
}
@Override
public Parfactor count(LogicalVariable lv) {
return p.count(lv);
}
@Override
public Parfactor expand(Prv cf, Term t) {
return p.expand(cf, t);
}
@Override
public Parfactor multiply(Parfactor other) {
return p.multiply(other);
}
@Override
public Parfactor multiplicationHelper(Parfactor other) {
return p.multiplicationHelper(other);
}
@Override
public SplitResult splitOn(Substitution s) throws IllegalArgumentException {
return p.splitOn(s);
}
@Override
public Parfactor sumOut(Prv prv) {
return p.sumOut(prv);
}
@Override
public Parfactor simplifyLogicalVariables() {
return p.simplifyLogicalVariables();
}
@Override
public void accept(ParfactorVisitor visitor, Parfactor p) {
this.p.accept(visitor, p);
}
@Override
public void accept(ParfactorVisitor visitor, StdParfactor p) {
this.p.accept(visitor, p);
}
@Override
public void accept(ParfactorVisitor visitor, AggregationParfactor p) {
this.p.accept(visitor, p);
}
@Override
public boolean equals(Object o) {
return p.equals(o);
}
@Override
public int hashCode() {
return p.hashCode();
}
@Override
public String toString() {
return p.toString();
}
}