
org.sosy_lab.java_smt.basicimpl.AbstractUFManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-smt Show documentation
Show all versions of java-smt Show documentation
Unified acccess layer to SMT solvers
The newest version!
// This file is part of JavaSMT,
// an API wrapper for a collection of SMT solvers:
// https://github.com/sosy-lab/java-smt
//
// SPDX-FileCopyrightText: 2020 Dirk Beyer
//
// SPDX-License-Identifier: Apache-2.0
package org.sosy_lab.java_smt.basicimpl;
import static org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager.checkVariableName;
import com.google.common.collect.Lists;
import java.util.Arrays;
import java.util.List;
import org.sosy_lab.java_smt.api.Formula;
import org.sosy_lab.java_smt.api.FormulaType;
import org.sosy_lab.java_smt.api.FunctionDeclaration;
import org.sosy_lab.java_smt.api.FunctionDeclarationKind;
import org.sosy_lab.java_smt.api.UFManager;
/**
* This class simplifies the implementation of the FunctionFormulaManager by converting the types to
* the solver specific type.
*
* @param The solver specific type.
* @param The solver specific type of declarations of any function application
* @param The solver specific type of formula-types.
*/
@SuppressWarnings("ClassTypeParameterName")
public abstract class AbstractUFManager
extends AbstractBaseFormulaManager
implements UFManager {
protected AbstractUFManager(FormulaCreator pCreator) {
super(pCreator);
}
@Override
public final FunctionDeclaration declareUF(
String pName, FormulaType pReturnType, List> pArgTypes) {
checkVariableName(pName);
List argTypes = Lists.transform(pArgTypes, this::toSolverType);
return FunctionDeclarationImpl.of(
pName,
FunctionDeclarationKind.UF,
pArgTypes,
pReturnType,
formulaCreator.declareUFImpl(pName, toSolverType(pReturnType), argTypes));
}
@Override
public FunctionDeclaration declareUF(
String pName, FormulaType pReturnType, FormulaType>... pArgs) {
checkVariableName(pName);
return declareUF(pName, pReturnType, Arrays.asList(pArgs));
}
@Override
public T callUF(FunctionDeclaration funcType, Formula... args) {
return formulaCreator.callFunction(funcType, Arrays.asList(args));
}
@Override
public final T callUF(
FunctionDeclaration pFunc, List extends Formula> pArgs) {
return formulaCreator.callFunction(pFunc, pArgs);
}
@Override
public T declareAndCallUF(
String name, FormulaType pReturnType, List pArgs) {
checkVariableName(name);
List> argTypes = Lists.transform(pArgs, getFormulaCreator()::getFormulaType);
FunctionDeclaration func = declareUF(name, pReturnType, argTypes);
return callUF(func, pArgs);
}
@Override
public T declareAndCallUF(
String name, FormulaType pReturnType, Formula... pArgs) {
checkVariableName(name);
return declareAndCallUF(name, pReturnType, Arrays.asList(pArgs));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy