You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					659 lines
				
				26 KiB
			
		
		
			
		
	
	
					659 lines
				
				26 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								// Copyright (C) 2004, 2007 International Business Machines and others.
							 | 
						||
| 
								 | 
							
								// All Rights Reserved.
							 | 
						||
| 
								 | 
							
								// This code is published under the Eclipse Public License.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// $Id: IpRegOptions.hpp 2189 2013-03-31 15:06:11Z stefan $
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Authors:  Carl Laird, Andreas Waechter     IBM    2005-06-18
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __IPREGOPTIONS_HPP__
							 | 
						||
| 
								 | 
							
								#define __IPREGOPTIONS_HPP__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "IpUtils.hpp"
							 | 
						||
| 
								 | 
							
								#include "IpReferenced.hpp"
							 | 
						||
| 
								 | 
							
								#include "IpException.hpp"
							 | 
						||
| 
								 | 
							
								#include "IpSmartPtr.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <map>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Ipopt
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  enum RegisteredOptionType
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    OT_Number,
							 | 
						||
| 
								 | 
							
								    OT_Integer,
							 | 
						||
| 
								 | 
							
								    OT_String,
							 | 
						||
| 
								 | 
							
								    OT_Unknown
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Base class for registered options. The derived types are more
							 | 
						||
| 
								 | 
							
								   *  specific to a string option or a Number (real) option, etc.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  class RegisteredOption : public ReferencedObject
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    /** class to hold the valid string settings for a string option */
							 | 
						||
| 
								 | 
							
								    class string_entry
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								      string_entry(const std::string& value, const std::string& description)
							 | 
						||
| 
								 | 
							
								          : value_(value), description_(description)
							 | 
						||
| 
								 | 
							
								      {}
							 | 
						||
| 
								 | 
							
								      std::string value_;
							 | 
						||
| 
								 | 
							
								      std::string description_;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Constructors / Destructors */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    RegisteredOption(Index counter)
							 | 
						||
| 
								 | 
							
								        :
							 | 
						||
| 
								 | 
							
								        type_(OT_Unknown),
							 | 
						||
| 
								 | 
							
								        has_lower_(false),
							 | 
						||
| 
								 | 
							
								        has_upper_(false),
							 | 
						||
| 
								 | 
							
								        counter_(counter)
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    RegisteredOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								                     const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                     const std::string& long_description,
							 | 
						||
| 
								 | 
							
								                     const std::string& registering_category,
							 | 
						||
| 
								 | 
							
								                     Index counter)
							 | 
						||
| 
								 | 
							
								        :
							 | 
						||
| 
								 | 
							
								        name_(name),
							 | 
						||
| 
								 | 
							
								        short_description_(short_description),
							 | 
						||
| 
								 | 
							
								        long_description_(long_description),
							 | 
						||
| 
								 | 
							
								        registering_category_(registering_category),
							 | 
						||
| 
								 | 
							
								        type_(OT_Unknown),
							 | 
						||
| 
								 | 
							
								        has_lower_(false),
							 | 
						||
| 
								 | 
							
								        has_upper_(false),
							 | 
						||
| 
								 | 
							
								        counter_(counter)
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    RegisteredOption(const RegisteredOption& copy)
							 | 
						||
| 
								 | 
							
								        :
							 | 
						||
| 
								 | 
							
								        name_(copy.name_),
							 | 
						||
| 
								 | 
							
								        short_description_(copy.short_description_),
							 | 
						||
| 
								 | 
							
								        long_description_(copy.long_description_),
							 | 
						||
| 
								 | 
							
								        registering_category_(copy.registering_category_),
							 | 
						||
| 
								 | 
							
								        type_(copy.type_),
							 | 
						||
| 
								 | 
							
								        has_lower_(copy.has_lower_),
							 | 
						||
| 
								 | 
							
								        lower_(copy.lower_),
							 | 
						||
| 
								 | 
							
								        has_upper_(copy.has_upper_),
							 | 
						||
| 
								 | 
							
								        upper_(copy.upper_),
							 | 
						||
| 
								 | 
							
								        valid_strings_(copy.valid_strings_),
							 | 
						||
| 
								 | 
							
								        counter_(copy.counter_)
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual ~RegisteredOption()
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DECLARE_STD_EXCEPTION(ERROR_CONVERTING_STRING_TO_ENUM);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Standard Get / Set Methods */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Get the option's name (tag in the input file) */
							 | 
						||
| 
								 | 
							
								    virtual const std::string& Name() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return name_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the option's name (tag in the input file) */
							 | 
						||
| 
								 | 
							
								    virtual void SetName(const std::string& name)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      name_ = name;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Get the short description */
							 | 
						||
| 
								 | 
							
								    virtual const std::string& ShortDescription() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return short_description_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Get the long description */
							 | 
						||
| 
								 | 
							
								    virtual const std::string& LongDescription() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return long_description_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the short description */
							 | 
						||
| 
								 | 
							
								    virtual void SetShortDescription(const std::string& short_description)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      short_description_ = short_description;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the long description */
							 | 
						||
| 
								 | 
							
								    virtual void SetLongDescription(const std::string& long_description)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      long_description_ = long_description;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Get the registering class */
							 | 
						||
| 
								 | 
							
								    virtual const std::string& RegisteringCategory() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return registering_category_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the registering class */
							 | 
						||
| 
								 | 
							
								    virtual void SetRegisteringCategory(const std::string& registering_category)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      registering_category_ = registering_category;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Get the Option's type */
							 | 
						||
| 
								 | 
							
								    virtual const RegisteredOptionType& Type() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return type_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Get the Option's type */
							 | 
						||
| 
								 | 
							
								    virtual void SetType(const RegisteredOptionType& type)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      type_ = type;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Counter */
							 | 
						||
| 
								 | 
							
								    virtual Index Counter() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return counter_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @name Get / Set methods valid for specific types - NOTE: the Type
							 | 
						||
| 
								 | 
							
								     *  must be set before calling these methods.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** check if the option has a lower bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number & OT_Integer*/
							 | 
						||
| 
								 | 
							
								    virtual const bool& HasLower() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number || type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      return has_lower_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** check if the lower bound is strict - can be called for
							 | 
						||
| 
								 | 
							
								    OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual const bool& LowerStrict() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number && has_lower_ == true);
							 | 
						||
| 
								 | 
							
								      return lower_strict_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the Number version of the lower bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual Number LowerNumber() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(has_lower_ == true && type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      return lower_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** set the Number version of the lower bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual void SetLowerNumber(const Number& lower, const bool& strict)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      lower_ = lower;
							 | 
						||
| 
								 | 
							
								      lower_strict_ = strict, has_lower_ = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the Integer version of the lower bound can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Integer*/
							 | 
						||
| 
								 | 
							
								    virtual Index LowerInteger() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(has_lower_ == true && type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      return (Index)lower_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** set the Integer version of the lower bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Integer */
							 | 
						||
| 
								 | 
							
								    virtual void SetLowerInteger(const Index& lower)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      lower_ = (Number)lower;
							 | 
						||
| 
								 | 
							
								      has_lower_ = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** check if the option has an upper bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number & OT_Integer*/
							 | 
						||
| 
								 | 
							
								    virtual const bool& HasUpper() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number || type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      return has_upper_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** check if the upper bound is strict - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual const bool& UpperStrict() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number && has_upper_ == true);
							 | 
						||
| 
								 | 
							
								      return upper_strict_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the Number version of the upper bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual Number UpperNumber() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(has_upper_ == true && type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      return upper_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** set the Number version of the upper bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual void SetUpperNumber(const Number& upper, const bool& strict)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      upper_ = upper;
							 | 
						||
| 
								 | 
							
								      upper_strict_ = strict;
							 | 
						||
| 
								 | 
							
								      has_upper_ = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the Integer version of the upper bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Integer*/
							 | 
						||
| 
								 | 
							
								    virtual Index UpperInteger() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(has_upper_ == true && type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      return (Index)upper_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** set the Integer version of the upper bound - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_Integer */
							 | 
						||
| 
								 | 
							
								    virtual void SetUpperInteger(const Index& upper)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      upper_ = (Number)upper;
							 | 
						||
| 
								 | 
							
								      has_upper_ = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** method to add valid string entries - can be called for
							 | 
						||
| 
								 | 
							
								     *  OT_String */
							 | 
						||
| 
								 | 
							
								    virtual void AddValidStringSetting(const std::string value,
							 | 
						||
| 
								 | 
							
								                                       const std::string description)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_String);
							 | 
						||
| 
								 | 
							
								      valid_strings_.push_back(string_entry(value, description));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the default as a Number - can be called for OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual Number DefaultNumber() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      return default_number_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the default as a Number - can be called for OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual void SetDefaultNumber(const Number& default_value)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      default_number_ = default_value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the default as an Integer - can be called for OT_Integer*/
							 | 
						||
| 
								 | 
							
								    virtual Index DefaultInteger() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      return (Index)default_number_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the default as an Integer - can be called for
							 | 
						||
| 
								 | 
							
								    OT_Integer */
							 | 
						||
| 
								 | 
							
								    virtual void SetDefaultInteger(const Index& default_value)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      default_number_ = (Number)default_value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the default as a string - can be called for OT_String */
							 | 
						||
| 
								 | 
							
								    virtual std::string DefaultString() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_String);
							 | 
						||
| 
								 | 
							
								      return default_string_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the default as a string, but as the index of the string in
							 | 
						||
| 
								 | 
							
								     *  the list - helps map from a string to an enum- can be called
							 | 
						||
| 
								 | 
							
								     *  for OT_String */
							 | 
						||
| 
								 | 
							
								    virtual Index DefaultStringAsEnum() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_String);
							 | 
						||
| 
								 | 
							
								      return MapStringSettingToEnum(default_string_);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Set the default as a string - can be called for OT_String */
							 | 
						||
| 
								 | 
							
								    virtual void SetDefaultString(const std::string& default_value)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_String);
							 | 
						||
| 
								 | 
							
								      default_string_ = default_value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** get the valid string settings - can be called for OT_String */
							 | 
						||
| 
								 | 
							
								    virtual std::vector<string_entry> GetValidStrings() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_String);
							 | 
						||
| 
								 | 
							
								      return valid_strings_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Check if the Number value is a valid setting - can be called
							 | 
						||
| 
								 | 
							
								     *  for OT_Number */
							 | 
						||
| 
								 | 
							
								    virtual bool IsValidNumberSetting(const Number& value) const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Number);
							 | 
						||
| 
								 | 
							
								      if (has_lower_ && ((lower_strict_ == true && value <= lower_) ||
							 | 
						||
| 
								 | 
							
								                         (lower_strict_ == false && value < lower_))) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (has_upper_ && ((upper_strict_ == true && value >= upper_) ||
							 | 
						||
| 
								 | 
							
								                         (upper_strict_ == false && value > upper_))) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Check if the Integer value is a valid setting - can be called
							 | 
						||
| 
								 | 
							
								     *  for OT_Integer */
							 | 
						||
| 
								 | 
							
								    virtual bool IsValidIntegerSetting(const Index& value) const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(type_ == OT_Integer);
							 | 
						||
| 
								 | 
							
								      if (has_lower_ && value < lower_) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (has_upper_ && value > upper_) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /** Check if the String value is a valid setting - can be called
							 | 
						||
| 
								 | 
							
								     *  for OT_String */
							 | 
						||
| 
								 | 
							
								    virtual bool IsValidStringSetting(const std::string& value) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Map a user setting (allowing any case) to the case used when
							 | 
						||
| 
								 | 
							
								     *  the setting was registered.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual std::string MapStringSetting(const std::string& value) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Map a user setting (allowing any case) to the index of the
							 | 
						||
| 
								 | 
							
								     *  matched setting in the list of string settings. Helps map a
							 | 
						||
| 
								 | 
							
								     *  string setting to an enumeration.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual Index MapStringSettingToEnum(const std::string& value) const;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** output a description of the option */
							 | 
						||
| 
								 | 
							
								    virtual void OutputDescription(const Journalist& jnlst) const;
							 | 
						||
| 
								 | 
							
								    /** output a more concise version */
							 | 
						||
| 
								 | 
							
								    virtual void OutputShortDescription(const Journalist& jnlst) const;
							 | 
						||
| 
								 | 
							
								    /** output a latex version */
							 | 
						||
| 
								 | 
							
								    virtual void OutputLatexDescription(const Journalist& jnlst) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    std::string name_;
							 | 
						||
| 
								 | 
							
								    std::string short_description_;
							 | 
						||
| 
								 | 
							
								    std::string long_description_;
							 | 
						||
| 
								 | 
							
								    std::string registering_category_;
							 | 
						||
| 
								 | 
							
								    RegisteredOptionType type_;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool has_lower_;
							 | 
						||
| 
								 | 
							
								    bool lower_strict_;
							 | 
						||
| 
								 | 
							
								    Number lower_;
							 | 
						||
| 
								 | 
							
								    bool has_upper_;
							 | 
						||
| 
								 | 
							
								    bool upper_strict_;
							 | 
						||
| 
								 | 
							
								    Number upper_;
							 | 
						||
| 
								 | 
							
								    Number default_number_;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void MakeValidLatexString(std::string source, std::string& dest) const;
							 | 
						||
| 
								 | 
							
								    std::string MakeValidLatexNumber(Number value) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Compare two strings and return true if they are equal (case
							 | 
						||
| 
								 | 
							
								    insensitive comparison) */
							 | 
						||
| 
								 | 
							
								    bool string_equal_insensitive(const std::string& s1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& s2) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    std::vector<string_entry> valid_strings_;
							 | 
						||
| 
								 | 
							
								    std::string default_string_;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Has the information as how many-th option this one was
							 | 
						||
| 
								 | 
							
								     *  registered. */
							 | 
						||
| 
								 | 
							
								    const Index counter_;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Class for storing registered options. Used for validation and
							 | 
						||
| 
								 | 
							
								   *  documentation.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  class RegisteredOptions : public ReferencedObject
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    /** Constructors / Destructors */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Standard Constructor */
							 | 
						||
| 
								 | 
							
								    RegisteredOptions()
							 | 
						||
| 
								 | 
							
								        :
							 | 
						||
| 
								 | 
							
								        next_counter_(0),
							 | 
						||
| 
								 | 
							
								        current_registering_category_("Uncategorized")
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Standard Destructor */
							 | 
						||
| 
								 | 
							
								    virtual ~RegisteredOptions()
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DECLARE_STD_EXCEPTION(OPTION_ALREADY_REGISTERED);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Methods to interact with registered options */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** set the registering class. All subsequent options will be
							 | 
						||
| 
								 | 
							
								     *  added with the registered class */
							 | 
						||
| 
								 | 
							
								    virtual void SetRegisteringCategory(const std::string& registering_category)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      current_registering_category_ = registering_category;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** retrieve the value of the current registering category */
							 | 
						||
| 
								 | 
							
								    virtual std::string RegisteringCategory()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return current_registering_category_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Add a Number option (with no restrictions) */
							 | 
						||
| 
								 | 
							
								    virtual void AddNumberOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                 const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                 Number default_value,
							 | 
						||
| 
								 | 
							
								                                 const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Number option (with a lower bound) */
							 | 
						||
| 
								 | 
							
								    virtual void AddLowerBoundedNumberOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								        const std::string& short_description,
							 | 
						||
| 
								 | 
							
								        Number lower, bool strict,
							 | 
						||
| 
								 | 
							
								        Number default_value,
							 | 
						||
| 
								 | 
							
								        const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Number option (with a upper bound) */
							 | 
						||
| 
								 | 
							
								    virtual void AddUpperBoundedNumberOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								        const std::string& short_description,
							 | 
						||
| 
								 | 
							
								        Number upper, bool strict,
							 | 
						||
| 
								 | 
							
								        Number default_value,
							 | 
						||
| 
								 | 
							
								        const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Number option (with a both bounds) */
							 | 
						||
| 
								 | 
							
								    virtual void AddBoundedNumberOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                        const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                        Number lower, bool lower_strict,
							 | 
						||
| 
								 | 
							
								                                        Number upper, bool upper_strict,
							 | 
						||
| 
								 | 
							
								                                        Number default_value,
							 | 
						||
| 
								 | 
							
								                                        const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Integer option (with no restrictions) */
							 | 
						||
| 
								 | 
							
								    virtual void AddIntegerOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  Index default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Integer option (with a lower bound) */
							 | 
						||
| 
								 | 
							
								    virtual void AddLowerBoundedIntegerOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								        const std::string& short_description,
							 | 
						||
| 
								 | 
							
								        Index lower, Index default_value,
							 | 
						||
| 
								 | 
							
								        const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Integer option (with a upper bound) */
							 | 
						||
| 
								 | 
							
								    virtual void AddUpperBoundedIntegerOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								        const std::string& short_description,
							 | 
						||
| 
								 | 
							
								        Index upper, Index default_value,
							 | 
						||
| 
								 | 
							
								        const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Add a Integer option (with a both bounds) */
							 | 
						||
| 
								 | 
							
								    virtual void AddBoundedIntegerOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                         const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                         Index lower, Index upper,
							 | 
						||
| 
								 | 
							
								                                         Index default_value,
							 | 
						||
| 
								 | 
							
								                                         const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Add a String option (with no restrictions) */
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                 const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                 const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                 const std::vector<std::string>& settings,
							 | 
						||
| 
								 | 
							
								                                 const std::vector<std::string>& descriptions,
							 | 
						||
| 
								 | 
							
								                                 const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    /** Methods that make adding string options with only a few
							 | 
						||
| 
								 | 
							
								     *  entries easier */
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption1(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption2(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption3(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption4(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption5(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption6(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption7(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting7,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description7,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption8(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting7,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description7,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting8,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description8,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption9(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                  const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                  const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description5,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description6,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting7,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description7,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting8,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description8,
							 | 
						||
| 
								 | 
							
								                                  const std::string& setting9,
							 | 
						||
| 
								 | 
							
								                                  const std::string& description9,
							 | 
						||
| 
								 | 
							
								                                  const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								    virtual void AddStringOption10(const std::string& name,
							 | 
						||
| 
								 | 
							
								                                   const std::string& short_description,
							 | 
						||
| 
								 | 
							
								                                   const std::string& default_value,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting1,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description1,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting2,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description2,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting3,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description3,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting4,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description4,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting5,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description5,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting6,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description6,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting7,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description7,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting8,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description8,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting9,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description9,
							 | 
						||
| 
								 | 
							
								                                   const std::string& setting10,
							 | 
						||
| 
								 | 
							
								                                   const std::string& description10,
							 | 
						||
| 
								 | 
							
								                                   const std::string& long_description="");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Get a registered option - this will return NULL if the option
							 | 
						||
| 
								 | 
							
								     *  does not exist */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const RegisteredOption> GetOption(const std::string& name);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Output documentation for the options - gives a description,
							 | 
						||
| 
								 | 
							
								     *  etc. */
							 | 
						||
| 
								 | 
							
								    virtual void OutputOptionDocumentation(const Journalist& jnlst, std::list<std::string>& categories);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Output documentation in Latex format to include in a latex file */
							 | 
						||
| 
								 | 
							
								    virtual void OutputLatexOptionDocumentation(const Journalist& jnlst, std::list<std::string>& categories);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef std::map<std::string, SmartPtr<RegisteredOption> > RegOptionsList;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Giving access to iteratable representation of the registered
							 | 
						||
| 
								 | 
							
								     *  options */
							 | 
						||
| 
								 | 
							
								    virtual const RegOptionsList& RegisteredOptionsList () const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return registered_options_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    Index next_counter_;
							 | 
						||
| 
								 | 
							
								    std::string current_registering_category_;
							 | 
						||
| 
								 | 
							
								    std::map<std::string, SmartPtr<RegisteredOption> > registered_options_;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								} // namespace Ipopt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |