WRAP_NON_TEMPLATE_CLASS("itk::FRPROptimizer")

  SET(MANAGED_TYPE_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedSingleValuedNonLinearOptimizer_TYPE.cxx.in)

  BEGIN_MANAGED_PROPERTY("Maximize" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if the optimizer maximizes or minimizes the cost function.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetMaximize( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetMaximize();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("MaximumIteration" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the maximum iteration limit.")
    SET(MANAGED_PROPERTY_TYPE      "unsigned int")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetMaximumIteration( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetMaximumIteration();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("MaximumLineIteration" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the maximum number of line search iterations.")
    SET(MANAGED_PROPERTY_TYPE      "unsigned int")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetMaximumLineIteration( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetMaximumLineIteration();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("StepLength" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the StepLength for the (scaled) spacing of the sampling of parameter space while bracketing the extremum.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetStepLength( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetStepLength();")
  END_MANAGED_PROPERTY()
  
  BEGIN_MANAGED_PROPERTY("StepTolerance" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the StepTolerance. Once the local extreme is known to be within this distance of the current parameter values, optimization terminates.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetStepTolerance( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetStepTolerance();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("ValueTolerance" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the ValueTolerance. Once this current cost function value is known to be within this tolerance of the cost function value at the local extreme, optimization terminates.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetValueTolerance( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetValueTolerance();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("CurrentIteration" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the number of elapsed iterations.")
    SET(MANAGED_PROPERTY_TYPE      "unsigned int")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetCurrentIteration();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("CurrentLineIteration" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the number elapsed current line search iterations.")
    SET(MANAGED_PROPERTY_TYPE      "unsigned int")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetCurrentLineIteration();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_METHOD("GetValue")
    SET(MANAGED_METHOD_INTERFACE       OFF)
    SET(MANAGED_METHOD_SUMMARY         "Get the current value.")
    SET(MANAGED_METHOD_RETURN_TYPE     "double")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "return m_PointerToNative->GetValue();")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("StopOptimization")
    SET(MANAGED_METHOD_INTERFACE       OFF)
    SET(MANAGED_METHOD_SUMMARY         "Stop the optimization algorithm.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->StopOptimization( );")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("SetToFletchReeves")
    SET(MANAGED_METHOD_INTERFACE       OFF)
    SET(MANAGED_METHOD_SUMMARY         "Set the algorithm to the Fletch-Reeves implementation.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetToFletchReeves( );")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("SetToPolakRibiere")
    SET(MANAGED_METHOD_INTERFACE       OFF)
    SET(MANAGED_METHOD_SUMMARY         "Set the algorithm to the Polak-Ribiere implementation.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetToPolakRibiere( );")
  END_MANAGED_METHOD()

END_WRAP_NON_TEMPLATE_CLASS()
