//------------------------------------------------------------------------------
// <auto-generated />
//
// This file was automatically generated by SWIG (https://www.swig.org).
// Version 4.1.1
//
// Do not make changes to this file unless you know what you are doing - modify
// the SWIG interface file instead.
//------------------------------------------------------------------------------

namespace QuantLib {

public class CreditDefaultSwap : Instrument {
  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
  private bool swigCMemOwnDerived;

  internal CreditDefaultSwap(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NQuantLibcPINVOKE.CreditDefaultSwap_SWIGSmartPtrUpcast(cPtr), true) {
    swigCMemOwnDerived = cMemoryOwn;
    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
  }

  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(CreditDefaultSwap obj) {
    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
  }

  protected override void Dispose(bool disposing) {
    lock(this) {
      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
        if (swigCMemOwnDerived) {
          swigCMemOwnDerived = false;
          NQuantLibcPINVOKE.delete_CreditDefaultSwap(swigCPtr);
        }
        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
      }
      base.Dispose(disposing);
    }
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Claim claim, DayCounter lastPeriodDayCounter, bool rebatesAccrual, Date tradeDate, uint cashSettlementDays) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_0((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter), rebatesAccrual, Date.getCPtr(tradeDate), cashSettlementDays), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Claim claim, DayCounter lastPeriodDayCounter, bool rebatesAccrual, Date tradeDate) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_1((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter), rebatesAccrual, Date.getCPtr(tradeDate)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Claim claim, DayCounter lastPeriodDayCounter, bool rebatesAccrual) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_2((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter), rebatesAccrual), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Claim claim, DayCounter lastPeriodDayCounter) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_3((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Claim claim) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_4((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Claim.getCPtr(claim)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_5((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_6((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_7((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_8((int)side, notional, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Date upfrontDate, Claim claim, DayCounter lastPeriodDayCounter, bool rebatesAccrual, Date tradeDate, uint cashSettlementDays) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_9((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Date.getCPtr(upfrontDate), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter), rebatesAccrual, Date.getCPtr(tradeDate), cashSettlementDays), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Date upfrontDate, Claim claim, DayCounter lastPeriodDayCounter, bool rebatesAccrual, Date tradeDate) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_10((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Date.getCPtr(upfrontDate), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter), rebatesAccrual, Date.getCPtr(tradeDate)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Date upfrontDate, Claim claim, DayCounter lastPeriodDayCounter, bool rebatesAccrual) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_11((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Date.getCPtr(upfrontDate), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter), rebatesAccrual), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Date upfrontDate, Claim claim, DayCounter lastPeriodDayCounter) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_12((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Date.getCPtr(upfrontDate), Claim.getCPtr(claim), DayCounter.getCPtr(lastPeriodDayCounter)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Date upfrontDate, Claim claim) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_13((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Date.getCPtr(upfrontDate), Claim.getCPtr(claim)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart, Date upfrontDate) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_14((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart), Date.getCPtr(upfrontDate)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime, Date protectionStart) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_15((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime, Date.getCPtr(protectionStart)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual, bool paysAtDefaultTime) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_16((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual, paysAtDefaultTime), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter, bool settlesAccrual) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_17((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter), settlesAccrual), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public CreditDefaultSwap(Protection.Side side, double notional, double upfront, double spread, Schedule schedule, BusinessDayConvention paymentConvention, DayCounter dayCounter) : this(NQuantLibcPINVOKE.new_CreditDefaultSwap__SWIG_18((int)side, notional, upfront, spread, Schedule.getCPtr(schedule), (int)paymentConvention, DayCounter.getCPtr(dayCounter)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public Protection.Side side() {
    Protection.Side ret = (Protection.Side)NQuantLibcPINVOKE.CreditDefaultSwap_side(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double notional() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_notional(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double runningSpread() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_runningSpread(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double upfront() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_upfront(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public bool settlesAccrual() {
    bool ret = NQuantLibcPINVOKE.CreditDefaultSwap_settlesAccrual(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public bool paysAtDefaultTime() {
    bool ret = NQuantLibcPINVOKE.CreditDefaultSwap_paysAtDefaultTime(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public Leg coupons() {
    Leg ret = new Leg(NQuantLibcPINVOKE.CreditDefaultSwap_coupons(swigCPtr), true);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public Date protectionStartDate() {
    Date ret = new Date(NQuantLibcPINVOKE.CreditDefaultSwap_protectionStartDate(swigCPtr), false);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public Date protectionEndDate() {
    Date ret = new Date(NQuantLibcPINVOKE.CreditDefaultSwap_protectionEndDate(swigCPtr), false);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public bool rebatesAccrual() {
    bool ret = NQuantLibcPINVOKE.CreditDefaultSwap_rebatesAccrual(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public CashFlow upfrontPayment() {
    global::System.IntPtr cPtr = NQuantLibcPINVOKE.CreditDefaultSwap_upfrontPayment(swigCPtr);
    CashFlow ret = (cPtr == global::System.IntPtr.Zero) ? null : new CashFlow(cPtr, true);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public CashFlow accrualRebate() {
    global::System.IntPtr cPtr = NQuantLibcPINVOKE.CreditDefaultSwap_accrualRebate(swigCPtr);
    CashFlow ret = (cPtr == global::System.IntPtr.Zero) ? null : new CashFlow(cPtr, true);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public Date tradeDate() {
    Date ret = new Date(NQuantLibcPINVOKE.CreditDefaultSwap_tradeDate(swigCPtr), false);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public uint cashSettlementDays() {
    uint ret = NQuantLibcPINVOKE.CreditDefaultSwap_cashSettlementDays(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double fairUpfront() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_fairUpfront(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double fairSpread() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_fairSpread(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double couponLegBPS() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_couponLegBPS(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double upfrontBPS() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_upfrontBPS(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double couponLegNPV() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_couponLegNPV(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double defaultLegNPV() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_defaultLegNPV(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double upfrontNPV() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_upfrontNPV(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double accrualRebateNPV() {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_accrualRebateNPV(swigCPtr);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double impliedHazardRate(double targetNPV, YieldTermStructureHandle discountCurve, DayCounter dayCounter, double recoveryRate, double accuracy, CreditDefaultSwap.PricingModel model) {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_impliedHazardRate__SWIG_0(swigCPtr, targetNPV, YieldTermStructureHandle.getCPtr(discountCurve), DayCounter.getCPtr(dayCounter), recoveryRate, accuracy, (int)model);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double impliedHazardRate(double targetNPV, YieldTermStructureHandle discountCurve, DayCounter dayCounter, double recoveryRate, double accuracy) {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_impliedHazardRate__SWIG_1(swigCPtr, targetNPV, YieldTermStructureHandle.getCPtr(discountCurve), DayCounter.getCPtr(dayCounter), recoveryRate, accuracy);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double impliedHazardRate(double targetNPV, YieldTermStructureHandle discountCurve, DayCounter dayCounter, double recoveryRate) {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_impliedHazardRate__SWIG_2(swigCPtr, targetNPV, YieldTermStructureHandle.getCPtr(discountCurve), DayCounter.getCPtr(dayCounter), recoveryRate);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double impliedHazardRate(double targetNPV, YieldTermStructureHandle discountCurve, DayCounter dayCounter) {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_impliedHazardRate__SWIG_3(swigCPtr, targetNPV, YieldTermStructureHandle.getCPtr(discountCurve), DayCounter.getCPtr(dayCounter));
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double conventionalSpread(double conventionalRecovery, YieldTermStructureHandle discountCurve, DayCounter dayCounter, CreditDefaultSwap.PricingModel model) {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_conventionalSpread__SWIG_0(swigCPtr, conventionalRecovery, YieldTermStructureHandle.getCPtr(discountCurve), DayCounter.getCPtr(dayCounter), (int)model);
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public double conventionalSpread(double conventionalRecovery, YieldTermStructureHandle discountCurve, DayCounter dayCounter) {
    double ret = NQuantLibcPINVOKE.CreditDefaultSwap_conventionalSpread__SWIG_1(swigCPtr, conventionalRecovery, YieldTermStructureHandle.getCPtr(discountCurve), DayCounter.getCPtr(dayCounter));
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public enum PricingModel {
    Midpoint,
    ISDA
  }

}

}
