//------------------------------------------------------------------------------
// <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 MirrorGaussianSimulatedAnnealing : OptimizationMethod {
  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
  private bool swigCMemOwnDerived;

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

  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(MirrorGaussianSimulatedAnnealing 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_MirrorGaussianSimulatedAnnealing(swigCPtr);
        }
        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
      }
      base.Dispose(disposing);
    }
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature, ReannealingTrivial reannealing, double startTemperature, double endTemperature, uint reAnnealSteps, MirrorGaussianSimulatedAnnealing.ResetScheme resetScheme, uint resetSteps) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_0(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature), ReannealingTrivial.getCPtr(reannealing), startTemperature, endTemperature, reAnnealSteps, (int)resetScheme, resetSteps), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature, ReannealingTrivial reannealing, double startTemperature, double endTemperature, uint reAnnealSteps, MirrorGaussianSimulatedAnnealing.ResetScheme resetScheme) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_1(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature), ReannealingTrivial.getCPtr(reannealing), startTemperature, endTemperature, reAnnealSteps, (int)resetScheme), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature, ReannealingTrivial reannealing, double startTemperature, double endTemperature, uint reAnnealSteps) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_2(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature), ReannealingTrivial.getCPtr(reannealing), startTemperature, endTemperature, reAnnealSteps), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature, ReannealingTrivial reannealing, double startTemperature, double endTemperature) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_3(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature), ReannealingTrivial.getCPtr(reannealing), startTemperature, endTemperature), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature, ReannealingTrivial reannealing, double startTemperature) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_4(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature), ReannealingTrivial.getCPtr(reannealing), startTemperature), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature, ReannealingTrivial reannealing) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_5(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature), ReannealingTrivial.getCPtr(reannealing)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public MirrorGaussianSimulatedAnnealing(SamplerMirrorGaussian sampler, ProbabilityBoltzmannDownhill probability, TemperatureExponential temperature) : this(NQuantLibcPINVOKE.new_MirrorGaussianSimulatedAnnealing__SWIG_6(SamplerMirrorGaussian.getCPtr(sampler), ProbabilityBoltzmannDownhill.getCPtr(probability), TemperatureExponential.getCPtr(temperature)), true) {
    if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
  }

  public enum ResetScheme {
    NoResetScheme,
    ResetToBestPoint,
    ResetToOrigin
  }

}

}
