- Main Page
- Classes
- Files

- File List
- File Members

# src/Common/IpRegOptions.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2004, 2007 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Eclipse Public License.
    00004 //
    00005 // $Id: IpRegOptions.hpp 2189 2013-03-31 15:06:11Z stefan $
    00006 //
    00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2005-06-18
    00008
    00009 #ifndef __IPREGOPTIONS_HPP__
    00010 #define __IPREGOPTIONS_HPP__
    00011
    00012 #include "IpUtils.hpp"
    00013 #include "IpReferenced.hpp"
    00014 #include "IpException.hpp"
    00015 #include "IpSmartPtr.hpp"
    00016
    00017 #include <map>
    00018
    00019 namespace Ipopt
    00020 {
    00021
    00022   enum RegisteredOptionType
    00023   {
    00024     OT_Number,
    00025     OT_Integer,
    00026     OT_String,
    00027     OT_Unknown
    00028   };
    00029
    00033   class RegisteredOption : public ReferencedObject
    00034   {
    00035   public:
    00037     class string_entry
    00038     {
    00039     public:
    00040       string_entry(const std::string& value, const std::string& description)
    00041           : value_(value), description_(description)
    00042       {}
    00043       std::string value_;
    00044       std::string description_;
    00045     };
    00046
    00049     RegisteredOption(Index counter)
    00050         :
    00051         type_(OT_Unknown),
    00052         has_lower_(false),
    00053         has_upper_(false),
    00054         counter_(counter)
    00055     {}
    00056
    00057     RegisteredOption(const std::string& name,
    00058                      const std::string& short_description,
    00059                      const std::string& long_description,
    00060                      const std::string& registering_category,
    00061                      Index counter)
    00062         :
    00063         name_(name),
    00064         short_description_(short_description),
    00065         long_description_(long_description),
    00066         registering_category_(registering_category),
    00067         type_(OT_Unknown),
    00068         has_lower_(false),
    00069         has_upper_(false),
    00070         counter_(counter)
    00071     {}
    00072
    00073     RegisteredOption(const RegisteredOption& copy)
    00074         :
    00075         name_(copy.name_),
    00076         short_description_(copy.short_description_),
    00077         long_description_(copy.long_description_),
    00078         registering_category_(copy.registering_category_),
    00079         type_(copy.type_),
    00080         has_lower_(copy.has_lower_),
    00081         lower_(copy.lower_),
    00082         has_upper_(copy.has_upper_),
    00083         upper_(copy.upper_),
    00084         valid_strings_(copy.valid_strings_),
    00085         counter_(copy.counter_)
    00086     {}
    00087
    00088     virtual ~RegisteredOption()
    00089     {}
    00091
    00092     DECLARE_STD_EXCEPTION(ERROR_CONVERTING_STRING_TO_ENUM);
    00093
    00097     virtual const std::string& Name() const
    00098     {
    00099       return name_;
    00100     }
    00102     virtual void SetName(const std::string& name)
    00103     {
    00104       name_ = name;
    00105     }
    00107     virtual const std::string& ShortDescription() const
    00108     {
    00109       return short_description_;
    00110     }
    00112     virtual const std::string& LongDescription() const
    00113     {
    00114       return long_description_;
    00115     }
    00117     virtual void SetShortDescription(const std::string& short_description)
    00118     {
    00119       short_description_ = short_description;
    00120     }
    00122     virtual void SetLongDescription(const std::string& long_description)
    00123     {
    00124       long_description_ = long_description;
    00125     }
    00127     virtual const std::string& RegisteringCategory() const
    00128     {
    00129       return registering_category_;
    00130     }
    00132     virtual void SetRegisteringCategory(const std::string& registering_category)
    00133     {
    00134       registering_category_ = registering_category;
    00135     }
    00137     virtual const RegisteredOptionType& Type() const
    00138     {
    00139       return type_;
    00140     }
    00142     virtual void SetType(const RegisteredOptionType& type)
    00143     {
    00144       type_ = type;
    00145     }
    00147     virtual Index Counter() const
    00148     {
    00149       return counter_;
    00150     }
    00152
    00159     virtual const bool& HasLower() const
    00160     {
    00161       DBG_ASSERT(type_ == OT_Number || type_ == OT_Integer);
    00162       return has_lower_;
    00163     }
    00166     virtual const bool& LowerStrict() const
    00167     {
    00168       DBG_ASSERT(type_ == OT_Number && has_lower_ == true);
    00169       return lower_strict_;
    00170     }
    00173     virtual Number LowerNumber() const
    00174     {
    00175       DBG_ASSERT(has_lower_ == true && type_ == OT_Number);
    00176       return lower_;
    00177     }
    00180     virtual void SetLowerNumber(const Number& lower, const bool& strict)
    00181     {
    00182       DBG_ASSERT(type_ == OT_Number);
    00183       lower_ = lower;
    00184       lower_strict_ = strict, has_lower_ = true;
    00185     }
    00188     virtual Index LowerInteger() const
    00189     {
    00190       DBG_ASSERT(has_lower_ == true && type_ == OT_Integer);
    00191       return (Index)lower_;
    00192     }
    00195     virtual void SetLowerInteger(const Index& lower)
    00196     {
    00197       DBG_ASSERT(type_ == OT_Integer);
    00198       lower_ = (Number)lower;
    00199       has_lower_ = true;
    00200     }
    00203     virtual const bool& HasUpper() const
    00204     {
    00205       DBG_ASSERT(type_ == OT_Number || type_ == OT_Integer);
    00206       return has_upper_;
    00207     }
    00210     virtual const bool& UpperStrict() const
    00211     {
    00212       DBG_ASSERT(type_ == OT_Number && has_upper_ == true);
    00213       return upper_strict_;
    00214     }
    00217     virtual Number UpperNumber() const
    00218     {
    00219       DBG_ASSERT(has_upper_ == true && type_ == OT_Number);
    00220       return upper_;
    00221     }
    00224     virtual void SetUpperNumber(const Number& upper, const bool& strict)
    00225     {
    00226       DBG_ASSERT(type_ == OT_Number);
    00227       upper_ = upper;
    00228       upper_strict_ = strict;
    00229       has_upper_ = true;
    00230     }
    00233     virtual Index UpperInteger() const
    00234     {
    00235       DBG_ASSERT(has_upper_ == true && type_ == OT_Integer);
    00236       return (Index)upper_;
    00237     }
    00240     virtual void SetUpperInteger(const Index& upper)
    00241     {
    00242       DBG_ASSERT(type_ == OT_Integer);
    00243       upper_ = (Number)upper;
    00244       has_upper_ = true;
    00245     }
    00248     virtual void AddValidStringSetting(const std::string value,
    00249                                        const std::string description)
    00250     {
    00251       DBG_ASSERT(type_ == OT_String);
    00252       valid_strings_.push_back(string_entry(value, description));
    00253     }
    00255     virtual Number DefaultNumber() const
    00256     {
    00257       DBG_ASSERT(type_ == OT_Number);
    00258       return default_number_;
    00259     }
    00261     virtual void SetDefaultNumber(const Number& default_value)
    00262     {
    00263       DBG_ASSERT(type_ == OT_Number);
    00264       default_number_ = default_value;
    00265     }
    00267     virtual Index DefaultInteger() const
    00268     {
    00269       DBG_ASSERT(type_ == OT_Integer);
    00270       return (Index)default_number_;
    00271     }
    00274     virtual void SetDefaultInteger(const Index& default_value)
    00275     {
    00276       DBG_ASSERT(type_ == OT_Integer);
    00277       default_number_ = (Number)default_value;
    00278     }
    00280     virtual std::string DefaultString() const
    00281     {
    00282       DBG_ASSERT(type_ == OT_String);
    00283       return default_string_;
    00284     }
    00288     virtual Index DefaultStringAsEnum() const
    00289     {
    00290       DBG_ASSERT(type_ == OT_String);
    00291       return MapStringSettingToEnum(default_string_);
    00292     }
    00294     virtual void SetDefaultString(const std::string& default_value)
    00295     {
    00296       DBG_ASSERT(type_ == OT_String);
    00297       default_string_ = default_value;
    00298     }
    00300     virtual std::vector<string_entry> GetValidStrings() const
    00301     {
    00302       DBG_ASSERT(type_ == OT_String);
    00303       return valid_strings_;
    00304     }
    00307     virtual bool IsValidNumberSetting(const Number& value) const
    00308     {
    00309       DBG_ASSERT(type_ == OT_Number);
    00310       if (has_lower_ && ((lower_strict_ == true && value <= lower_) ||
    00311                          (lower_strict_ == false && value < lower_))) {
    00312         return false;
    00313       }
    00314       if (has_upper_ && ((upper_strict_ == true && value >= upper_) ||
    00315                          (upper_strict_ == false && value > upper_))) {
    00316         return false;
    00317       }
    00318       return true;
    00319     }
    00322     virtual bool IsValidIntegerSetting(const Index& value) const
    00323     {
    00324       DBG_ASSERT(type_ == OT_Integer);
    00325       if (has_lower_ && value < lower_) {
    00326         return false;
    00327       }
    00328       if (has_upper_ && value > upper_) {
    00329         return false;
    00330       }
    00331       return true;
    00332     }
    00335     virtual bool IsValidStringSetting(const std::string& value) const;
    00336
    00340     virtual std::string MapStringSetting(const std::string& value) const;
    00341
    00346     virtual Index MapStringSettingToEnum(const std::string& value) const;
    00348
    00350     virtual void OutputDescription(const Journalist& jnlst) const;
    00352     virtual void OutputShortDescription(const Journalist& jnlst) const;
    00354     virtual void OutputLatexDescription(const Journalist& jnlst) const;
    00355
    00356   private:
    00357     std::string name_;
    00358     std::string short_description_;
    00359     std::string long_description_;
    00360     std::string registering_category_;
    00361     RegisteredOptionType type_;
    00362
    00363     bool has_lower_;
    00364     bool lower_strict_;
    00365     Number lower_;
    00366     bool has_upper_;
    00367     bool upper_strict_;
    00368     Number upper_;
    00369     Number default_number_;
    00370
    00371     void MakeValidLatexString(std::string source, std::string& dest) const;
    00372     std::string MakeValidLatexNumber(Number value) const;
    00373
    00376     bool string_equal_insensitive(const std::string& s1,
    00377                                   const std::string& s2) const;
    00378
    00379     std::vector<string_entry> valid_strings_;
    00380     std::string default_string_;
    00381
    00384     const Index counter_;
    00385   };
    00386
    00390   class RegisteredOptions : public ReferencedObject
    00391   {
    00392   public:
    00396     RegisteredOptions()
    00397         :
    00398         next_counter_(0),
    00399         current_registering_category_("Uncategorized")
    00400     {}
    00401
    00403     virtual ~RegisteredOptions()
    00404     {}
    00406
    00407     DECLARE_STD_EXCEPTION(OPTION_ALREADY_REGISTERED);
    00408
    00413     virtual void SetRegisteringCategory(const std::string& registering_category)
    00414     {
    00415       current_registering_category_ = registering_category;
    00416     }
    00417
    00419     virtual std::string RegisteringCategory()
    00420     {
    00421       return current_registering_category_;
    00422     }
    00423
    00425     virtual void AddNumberOption(const std::string& name,
    00426                                  const std::string& short_description,
    00427                                  Number default_value,
    00428                                  const std::string& long_description="");
    00430     virtual void AddLowerBoundedNumberOption(const std::string& name,
    00431         const std::string& short_description,
    00432         Number lower, bool strict,
    00433         Number default_value,
    00434         const std::string& long_description="");
    00436     virtual void AddUpperBoundedNumberOption(const std::string& name,
    00437         const std::string& short_description,
    00438         Number upper, bool strict,
    00439         Number default_value,
    00440         const std::string& long_description="");
    00442     virtual void AddBoundedNumberOption(const std::string& name,
    00443                                         const std::string& short_description,
    00444                                         Number lower, bool lower_strict,
    00445                                         Number upper, bool upper_strict,
    00446                                         Number default_value,
    00447                                         const std::string& long_description="");
    00449     virtual void AddIntegerOption(const std::string& name,
    00450                                   const std::string& short_description,
    00451                                   Index default_value,
    00452                                   const std::string& long_description="");
    00454     virtual void AddLowerBoundedIntegerOption(const std::string& name,
    00455         const std::string& short_description,
    00456         Index lower, Index default_value,
    00457         const std::string& long_description="");
    00459     virtual void AddUpperBoundedIntegerOption(const std::string& name,
    00460         const std::string& short_description,
    00461         Index upper, Index default_value,
    00462         const std::string& long_description="");
    00464     virtual void AddBoundedIntegerOption(const std::string& name,
    00465                                          const std::string& short_description,
    00466                                          Index lower, Index upper,
    00467                                          Index default_value,
    00468                                          const std::string& long_description="");
    00469
    00471     virtual void AddStringOption(const std::string& name,
    00472                                  const std::string& short_description,
    00473                                  const std::string& default_value,
    00474                                  const std::vector<std::string>& settings,
    00475                                  const std::vector<std::string>& descriptions,
    00476                                  const std::string& long_description="");
    00479     virtual void AddStringOption1(const std::string& name,
    00480                                   const std::string& short_description,
    00481                                   const std::string& default_value,
    00482                                   const std::string& setting1,
    00483                                   const std::string& description1,
    00484                                   const std::string& long_description="");
    00485     virtual void AddStringOption2(const std::string& name,
    00486                                   const std::string& short_description,
    00487                                   const std::string& default_value,
    00488                                   const std::string& setting1,
    00489                                   const std::string& description1,
    00490                                   const std::string& setting2,
    00491                                   const std::string& description2,
    00492                                   const std::string& long_description="");
    00493     virtual void AddStringOption3(const std::string& name,
    00494                                   const std::string& short_description,
    00495                                   const std::string& default_value,
    00496                                   const std::string& setting1,
    00497                                   const std::string& description1,
    00498                                   const std::string& setting2,
    00499                                   const std::string& description2,
    00500                                   const std::string& setting3,
    00501                                   const std::string& description3,
    00502                                   const std::string& long_description="");
    00503     virtual void AddStringOption4(const std::string& name,
    00504                                   const std::string& short_description,
    00505                                   const std::string& default_value,
    00506                                   const std::string& setting1,
    00507                                   const std::string& description1,
    00508                                   const std::string& setting2,
    00509                                   const std::string& description2,
    00510                                   const std::string& setting3,
    00511                                   const std::string& description3,
    00512                                   const std::string& setting4,
    00513                                   const std::string& description4,
    00514                                   const std::string& long_description="");
    00515     virtual void AddStringOption5(const std::string& name,
    00516                                   const std::string& short_description,
    00517                                   const std::string& default_value,
    00518                                   const std::string& setting1,
    00519                                   const std::string& description1,
    00520                                   const std::string& setting2,
    00521                                   const std::string& description2,
    00522                                   const std::string& setting3,
    00523                                   const std::string& description3,
    00524                                   const std::string& setting4,
    00525                                   const std::string& description4,
    00526                                   const std::string& setting5,
    00527                                   const std::string& description5,
    00528                                   const std::string& long_description="");
    00529     virtual void AddStringOption6(const std::string& name,
    00530                                   const std::string& short_description,
    00531                                   const std::string& default_value,
    00532                                   const std::string& setting1,
    00533                                   const std::string& description1,
    00534                                   const std::string& setting2,
    00535                                   const std::string& description2,
    00536                                   const std::string& setting3,
    00537                                   const std::string& description3,
    00538                                   const std::string& setting4,
    00539                                   const std::string& description4,
    00540                                   const std::string& setting5,
    00541                                   const std::string& description5,
    00542                                   const std::string& setting6,
    00543                                   const std::string& description6,
    00544                                   const std::string& long_description="");
    00545     virtual void AddStringOption7(const std::string& name,
    00546                                   const std::string& short_description,
    00547                                   const std::string& default_value,
    00548                                   const std::string& setting1,
    00549                                   const std::string& description1,
    00550                                   const std::string& setting2,
    00551                                   const std::string& description2,
    00552                                   const std::string& setting3,
    00553                                   const std::string& description3,
    00554                                   const std::string& setting4,
    00555                                   const std::string& description4,
    00556                                   const std::string& setting5,
    00557                                   const std::string& description5,
    00558                                   const std::string& setting6,
    00559                                   const std::string& description6,
    00560                                   const std::string& setting7,
    00561                                   const std::string& description7,
    00562                                   const std::string& long_description="");
    00563     virtual void AddStringOption8(const std::string& name,
    00564                                   const std::string& short_description,
    00565                                   const std::string& default_value,
    00566                                   const std::string& setting1,
    00567                                   const std::string& description1,
    00568                                   const std::string& setting2,
    00569                                   const std::string& description2,
    00570                                   const std::string& setting3,
    00571                                   const std::string& description3,
    00572                                   const std::string& setting4,
    00573                                   const std::string& description4,
    00574                                   const std::string& setting5,
    00575                                   const std::string& description5,
    00576                                   const std::string& setting6,
    00577                                   const std::string& description6,
    00578                                   const std::string& setting7,
    00579                                   const std::string& description7,
    00580                                   const std::string& setting8,
    00581                                   const std::string& description8,
    00582                                   const std::string& long_description="");
    00583     virtual void AddStringOption9(const std::string& name,
    00584                                   const std::string& short_description,
    00585                                   const std::string& default_value,
    00586                                   const std::string& setting1,
    00587                                   const std::string& description1,
    00588                                   const std::string& setting2,
    00589                                   const std::string& description2,
    00590                                   const std::string& setting3,
    00591                                   const std::string& description3,
    00592                                   const std::string& setting4,
    00593                                   const std::string& description4,
    00594                                   const std::string& setting5,
    00595                                   const std::string& description5,
    00596                                   const std::string& setting6,
    00597                                   const std::string& description6,
    00598                                   const std::string& setting7,
    00599                                   const std::string& description7,
    00600                                   const std::string& setting8,
    00601                                   const std::string& description8,
    00602                                   const std::string& setting9,
    00603                                   const std::string& description9,
    00604                                   const std::string& long_description="");
    00605     virtual void AddStringOption10(const std::string& name,
    00606                                    const std::string& short_description,
    00607                                    const std::string& default_value,
    00608                                    const std::string& setting1,
    00609                                    const std::string& description1,
    00610                                    const std::string& setting2,
    00611                                    const std::string& description2,
    00612                                    const std::string& setting3,
    00613                                    const std::string& description3,
    00614                                    const std::string& setting4,
    00615                                    const std::string& description4,
    00616                                    const std::string& setting5,
    00617                                    const std::string& description5,
    00618                                    const std::string& setting6,
    00619                                    const std::string& description6,
    00620                                    const std::string& setting7,
    00621                                    const std::string& description7,
    00622                                    const std::string& setting8,
    00623                                    const std::string& description8,
    00624                                    const std::string& setting9,
    00625                                    const std::string& description9,
    00626                                    const std::string& setting10,
    00627                                    const std::string& description10,
    00628                                    const std::string& long_description="");
    00629
    00632     virtual SmartPtr<const RegisteredOption> GetOption(const std::string& name);
    00633
    00636     virtual void OutputOptionDocumentation(const Journalist& jnlst, std::list<std::string>& categories);
    00637
    00639     virtual void OutputLatexOptionDocumentation(const Journalist& jnlst, std::list<std::string>& categories);
    00641
    00642     typedef std::map<std::string, SmartPtr<RegisteredOption> > RegOptionsList;
    00643
    00646     virtual const RegOptionsList& RegisteredOptionsList () const
    00647     {
    00648       return registered_options_;
    00649     }
    00650
    00651   private:
    00652     Index next_counter_;
    00653     std::string current_registering_category_;
    00654     std::map<std::string, SmartPtr<RegisteredOption> > registered_options_;
    00655   };
    00656 } // namespace Ipopt
    00657
    00658 #endif

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines