All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sosy_lab.java_smt.basicimpl.AbstractUFManager Maven / Gradle / Ivy

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 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