/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 3.0.12
 *
 * 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 ASX {
  private transient long swigCPtr;
  protected transient boolean swigCMemOwn;

  protected ASX(long cPtr, boolean cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = cPtr;
  }

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

  protected void finalize() {
    delete();
  }

  public synchronized void delete() {
    if (swigCPtr != 0) {
      if (swigCMemOwn) {
        swigCMemOwn = false;
        QuantLibJNI.delete_ASX(swigCPtr);
      }
      swigCPtr = 0;
    }
  }

  public static boolean isASXdate(Date d, boolean mainCycle) {
    return QuantLibJNI.ASX_isASXdate__SWIG_0(Date.getCPtr(d), d, mainCycle);
  }

  public static boolean isASXdate(Date d) {
    return QuantLibJNI.ASX_isASXdate__SWIG_1(Date.getCPtr(d), d);
  }

  public static boolean isASXcode(String code, boolean mainCycle) {
    return QuantLibJNI.ASX_isASXcode__SWIG_0(code, mainCycle);
  }

  public static boolean isASXcode(String code) {
    return QuantLibJNI.ASX_isASXcode__SWIG_1(code);
  }

  public static String code(Date asxDate) {
    return QuantLibJNI.ASX_code(Date.getCPtr(asxDate), asxDate);
  }

  public static Date date(String asxCode, Date referenceDate) {
    return new Date(QuantLibJNI.ASX_date__SWIG_0(asxCode, Date.getCPtr(referenceDate), referenceDate), true);
  }

  public static Date date(String asxCode) {
    return new Date(QuantLibJNI.ASX_date__SWIG_1(asxCode), true);
  }

  public static Date nextDate(Date d, boolean mainCycle) {
    return new Date(QuantLibJNI.ASX_nextDate__SWIG_0(Date.getCPtr(d), d, mainCycle), true);
  }

  public static Date nextDate(Date d) {
    return new Date(QuantLibJNI.ASX_nextDate__SWIG_1(Date.getCPtr(d), d), true);
  }

  public static Date nextDate() {
    return new Date(QuantLibJNI.ASX_nextDate__SWIG_2(), true);
  }

  public static Date nextDate(String asxCode, boolean mainCycle, Date referenceDate) {
    return new Date(QuantLibJNI.ASX_nextDate__SWIG_3(asxCode, mainCycle, Date.getCPtr(referenceDate), referenceDate), true);
  }

  public static Date nextDate(String asxCode, boolean mainCycle) {
    return new Date(QuantLibJNI.ASX_nextDate__SWIG_4(asxCode, mainCycle), true);
  }

  public static Date nextDate(String asxCode) {
    return new Date(QuantLibJNI.ASX_nextDate__SWIG_5(asxCode), true);
  }

  public static String nextCode(Date d, boolean mainCycle) {
    return QuantLibJNI.ASX_nextCode__SWIG_0(Date.getCPtr(d), d, mainCycle);
  }

  public static String nextCode(Date d) {
    return QuantLibJNI.ASX_nextCode__SWIG_1(Date.getCPtr(d), d);
  }

  public static String nextCode() {
    return QuantLibJNI.ASX_nextCode__SWIG_2();
  }

  public static String nextCode(String asxCode, boolean mainCycle, Date referenceDate) {
    return QuantLibJNI.ASX_nextCode__SWIG_3(asxCode, mainCycle, Date.getCPtr(referenceDate), referenceDate);
  }

  public static String nextCode(String asxCode, boolean mainCycle) {
    return QuantLibJNI.ASX_nextCode__SWIG_4(asxCode, mainCycle);
  }

  public static String nextCode(String asxCode) {
    return QuantLibJNI.ASX_nextCode__SWIG_5(asxCode);
  }

  public ASX() {
    this(QuantLibJNI.new_ASX(), true);
  }

  public final static class Month {
    public final static ASX.Month F = new ASX.Month("F", QuantLibJNI.ASX_F_get());
    public final static ASX.Month G = new ASX.Month("G", QuantLibJNI.ASX_G_get());
    public final static ASX.Month H = new ASX.Month("H", QuantLibJNI.ASX_H_get());
    public final static ASX.Month J = new ASX.Month("J", QuantLibJNI.ASX_J_get());
    public final static ASX.Month K = new ASX.Month("K", QuantLibJNI.ASX_K_get());
    public final static ASX.Month M = new ASX.Month("M", QuantLibJNI.ASX_M_get());
    public final static ASX.Month N = new ASX.Month("N", QuantLibJNI.ASX_N_get());
    public final static ASX.Month Q = new ASX.Month("Q", QuantLibJNI.ASX_Q_get());
    public final static ASX.Month U = new ASX.Month("U", QuantLibJNI.ASX_U_get());
    public final static ASX.Month V = new ASX.Month("V", QuantLibJNI.ASX_V_get());
    public final static ASX.Month X = new ASX.Month("X", QuantLibJNI.ASX_X_get());
    public final static ASX.Month Z = new ASX.Month("Z", QuantLibJNI.ASX_Z_get());

    public final int swigValue() {
      return swigValue;
    }

    public String toString() {
      return swigName;
    }

    public static Month swigToEnum(int swigValue) {
      if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
        return swigValues[swigValue];
      for (int i = 0; i < swigValues.length; i++)
        if (swigValues[i].swigValue == swigValue)
          return swigValues[i];
      throw new IllegalArgumentException("No enum " + Month.class + " with value " + swigValue);
    }

    private Month(String swigName) {
      this.swigName = swigName;
      this.swigValue = swigNext++;
    }

    private Month(String swigName, int swigValue) {
      this.swigName = swigName;
      this.swigValue = swigValue;
      swigNext = swigValue+1;
    }

    private Month(String swigName, Month swigEnum) {
      this.swigName = swigName;
      this.swigValue = swigEnum.swigValue;
      swigNext = this.swigValue+1;
    }

    private static Month[] swigValues = { F, G, H, J, K, M, N, Q, U, V, X, Z };
    private static int swigNext = 0;
    private final int swigValue;
    private final String swigName;
  }

}
