/*++ Copyright (c) 2015 Microsoft Corporation --*/ using Microsoft.SolverFoundation.Services; using System; namespace Microsoft.SolverFoundation.Plugin.Z3 { /// /// Implementation of the solver parameters for Z3 /// public class Z3BaseParams : ISolverParameters { #region Private Members /// The abort method we can call (defaults to always false) protected Func _queryAbortFunction = delegate() { return false; }; /// The directive to use protected Directive _directive = null; protected OptimizationKind _optKind; protected CardinalityAlgorithm _cardAlgorithm; protected PseudoBooleanAlgorithm _pboAlgorithm; protected ArithmeticStrategy _arithStrategy; protected string _smt2LogFile; #endregion Private Members #region Construction public Z3BaseParams() { } public Z3BaseParams(Directive directive) { _directive = directive; var z3Directive = directive as Z3BaseDirective; if (z3Directive != null) { _optKind = z3Directive.OptKind; _cardAlgorithm = z3Directive.CardinalityAlgorithm; _pboAlgorithm = z3Directive.PseudoBooleanAlgorithm; _arithStrategy = z3Directive.ArithmeticStrategy; _smt2LogFile = z3Directive.SMT2LogFile; } } public Z3BaseParams(Func queryAbortFunction) { _queryAbortFunction = queryAbortFunction; } public Z3BaseParams(Z3BaseParams z3Parameters) { _queryAbortFunction = z3Parameters._queryAbortFunction; } #endregion Construction #region ISolverParameters Members /// /// Getter for the abort method /// public Func QueryAbort { get { return _queryAbortFunction; } set { _queryAbortFunction = value; } } public OptimizationKind OptKind { get { return _optKind; } set { _optKind = value; } } public CardinalityAlgorithm CardinalityAlgorithm { get { return _cardAlgorithm; } set { _cardAlgorithm = value; } } public PseudoBooleanAlgorithm PseudoBooleanAlgorithm { get { return _pboAlgorithm; } set { _pboAlgorithm = value; } } public ArithmeticStrategy ArithmeticStrategy { get { return _arithStrategy; } set { _arithStrategy = value; } } public string SMT2LogFile { get { return _smt2LogFile; } set { _smt2LogFile = value; } } #endregion } }