/* ----------------------------------------------------------------------------
 * 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.
 * ----------------------------------------------------------------------------- */

package org.quantlib;

public class FixedRateBondHelper extends BondHelper {
  private transient long swigCPtr;
  private transient boolean swigCMemOwnDerived;

  protected FixedRateBondHelper(long cPtr, boolean cMemoryOwn) {
    super(QuantLibJNI.FixedRateBondHelper_SWIGSmartPtrUpcast(cPtr), true);
    swigCMemOwnDerived = cMemoryOwn;
    swigCPtr = cPtr;
  }

  protected static long getCPtr(FixedRateBondHelper obj) {
    return (obj == null) ? 0 : obj.swigCPtr;
  }

  protected void swigSetCMemOwn(boolean own) {
    swigCMemOwnDerived = own;
    super.swigSetCMemOwn(own);
  }

  @SuppressWarnings("deprecation")
  protected void finalize() {
    delete();
  }

  public synchronized void delete() {
    if (swigCPtr != 0) {
      if (swigCMemOwnDerived) {
        swigCMemOwnDerived = false;
        QuantLibJNI.delete_FixedRateBondHelper(swigCPtr);
      }
      swigCPtr = 0;
    }
    super.delete();
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate, Calendar paymentCalendar, Period exCouponPeriod, Calendar exCouponCalendar, BusinessDayConvention exCouponConvention, boolean exCouponEndOfMonth, BondPrice.Type priceType) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_0(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate, Calendar.getCPtr(paymentCalendar), paymentCalendar, Period.getCPtr(exCouponPeriod), exCouponPeriod, Calendar.getCPtr(exCouponCalendar), exCouponCalendar, exCouponConvention.swigValue(), exCouponEndOfMonth, priceType.swigValue()), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate, Calendar paymentCalendar, Period exCouponPeriod, Calendar exCouponCalendar, BusinessDayConvention exCouponConvention, boolean exCouponEndOfMonth) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_1(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate, Calendar.getCPtr(paymentCalendar), paymentCalendar, Period.getCPtr(exCouponPeriod), exCouponPeriod, Calendar.getCPtr(exCouponCalendar), exCouponCalendar, exCouponConvention.swigValue(), exCouponEndOfMonth), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate, Calendar paymentCalendar, Period exCouponPeriod, Calendar exCouponCalendar, BusinessDayConvention exCouponConvention) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_2(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate, Calendar.getCPtr(paymentCalendar), paymentCalendar, Period.getCPtr(exCouponPeriod), exCouponPeriod, Calendar.getCPtr(exCouponCalendar), exCouponCalendar, exCouponConvention.swigValue()), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate, Calendar paymentCalendar, Period exCouponPeriod, Calendar exCouponCalendar) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_3(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate, Calendar.getCPtr(paymentCalendar), paymentCalendar, Period.getCPtr(exCouponPeriod), exCouponPeriod, Calendar.getCPtr(exCouponCalendar), exCouponCalendar), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate, Calendar paymentCalendar, Period exCouponPeriod) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_4(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate, Calendar.getCPtr(paymentCalendar), paymentCalendar, Period.getCPtr(exCouponPeriod), exCouponPeriod), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate, Calendar paymentCalendar) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_5(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate, Calendar.getCPtr(paymentCalendar), paymentCalendar), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption, Date issueDate) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_6(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption, Date.getCPtr(issueDate), issueDate), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention, double redemption) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_7(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue(), redemption), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter, BusinessDayConvention paymentConvention) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_8(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter, paymentConvention.swigValue()), true);
  }

  public FixedRateBondHelper(QuoteHandle cleanPrice, long settlementDays, double faceAmount, Schedule schedule, DoubleVector coupons, DayCounter paymentDayCounter) {
    this(QuantLibJNI.new_FixedRateBondHelper__SWIG_9(QuoteHandle.getCPtr(cleanPrice), cleanPrice, settlementDays, faceAmount, Schedule.getCPtr(schedule), schedule, DoubleVector.getCPtr(coupons), coupons, DayCounter.getCPtr(paymentDayCounter), paymentDayCounter), true);
  }

  public FixedRateBond fixedRateBond() {
    long cPtr = QuantLibJNI.FixedRateBondHelper_fixedRateBond(swigCPtr, this);
    return (cPtr == 0) ? null : new FixedRateBond(cPtr, true);
  }

}
