BonRegisteredOptions.hpp

Go to the documentation of this file.
00001 // (C) Copyright International Business Machines Corporation 2007
00002 //
00003 // All Rights Reserved.
00004 // This code is published under the Common Public License.
00005 //
00006 // Authors :
00007 // Pierre Bonami, Carnegie Mellon University,
00008 //
00009 // Date : 27/08/2007
00010 
00011 #ifndef BonRegisteredOptions_H
00012 #define BonRegisteredOptions_H
00013 
00014 #include "IpRegOptions.hpp"
00015 #include "IpException.hpp"
00016 #include "CoinError.hpp"
00017 #include "IpTypes.hpp"
00018 #include <iostream>
00019 namespace Bonmin {
00024 class RegisteredOptions: public Ipopt::RegisteredOptions{
00025   public:
00026     enum ExtraOptInfosBits{
00027     validInHybrid=0,
00028     validInQG,
00029     validInOA,
00030     validInBBB
00031    };
00032    enum ExtraCategoriesInfo{
00033     BonminCategory = 0,
00034     IpoptCategory ,
00035     FilterCategory ,
00036     BqpdCategory ,
00037     CouenneCategory 
00038    };
00040     RegisteredOptions():
00041        Ipopt::RegisteredOptions(){
00042     }
00043 
00045     ~RegisteredOptions(){
00046     }
00047 
00048    //DECLARE_STD_EXCEPTION(OPTION_NOT_REGISTERED); 
00050    void SetRegisteringCategory (const std::string &registering_category,
00051                                 const ExtraCategoriesInfo extra){
00052       Ipopt::RegisteredOptions::SetRegisteringCategory(registering_category);
00053       categoriesInfos_[registering_category] = extra;}
00054  
00056    inline void optionExists(const std::string & option){
00057      if(!IsValid(GetOption(option))){
00058        std::string msg = "Try to access option: "+option;
00059        msg += "\n Option is not registered.\n";
00060        throw CoinError("Bonmin::RegisteredOption","optionExists",msg);
00061      }
00062    }
00063 
00065    inline void setOptionExtraInfo(const std::string & option, int code){
00066       optionExists(option);
00067       bonOptInfos_[option] = code;
00068    }
00069 
00071    inline void optionValidForHybrid(const std::string &option){
00072       optionExists(option);
00073      bonOptInfos_[option] |= 1 << validInHybrid;}
00074 
00076    inline void optionValidForBQG(const std::string &option){
00077      optionExists(option);
00078      bonOptInfos_[option] |= 1 << validInQG;}
00079    
00081    inline void optionValidForBOA(const std::string &option){
00082      optionExists(option);
00083      bonOptInfos_[option] |= 1 << validInOA;}
00084    
00086    inline void optionValidForBBB(const std::string &option){
00087      optionExists(option);
00088      bonOptInfos_[option] |= 1 << validInBBB;}
00089 
00090 
00092    inline bool isValidForHybrid(const std::string &option){
00093       optionExists(option);
00094      std::map<std::string, int>::iterator i = bonOptInfos_.find(option);
00095      if(i != bonOptInfos_.end()) 
00096      return (i->second) & (1 << validInHybrid);
00097      else return true;}
00098 
00100    inline bool isValidForBQG(const std::string &option){
00101      optionExists(option);
00102      std::map<std::string, int>::iterator i = bonOptInfos_.find(option);
00103      if(i != bonOptInfos_.end()) 
00104        return (i->second) & (1 << validInQG);
00105      else return true;}
00106    
00108    inline bool isValidForBOA(const std::string &option){
00109      optionExists(option);
00110      std::map<std::string, int>::iterator i = bonOptInfos_.find(option);
00111      if(i != bonOptInfos_.end()) 
00112      return (i->second) & (1 << validInOA);
00113      return true;}
00114    
00116    inline bool isValidForBBB(const std::string &option){
00117      optionExists(option);
00118      std::map<std::string, int>::iterator i = bonOptInfos_.find(option);
00119      if(i != bonOptInfos_.end()) 
00120      return (i->second) & (1 << validInBBB);
00121      return true;}
00123    void writeLatexOptionsTable(std::ostream &of, ExtraCategoriesInfo which);
00124 
00126    void writeHtmlOptionsTable(std::ostream &of, ExtraCategoriesInfo which);
00127 
00128 
00130    void writeLatexHtmlDoc(std::ostream &of, ExtraCategoriesInfo which);
00132   void writeBonminOpt(std::ostream &os, ExtraCategoriesInfo which);
00133    private:
00135    void chooseOptions(ExtraCategoriesInfo which, std::list<Ipopt::RegisteredOption *> &options);
00137    void writeHtmlOptionsTable(std::ostream & os, std::list<Ipopt::RegisteredOption *> &options);
00139    std::map<std::string, int> bonOptInfos_;
00142    std::map<std::string, ExtraCategoriesInfo> categoriesInfos_;
00144    ExtraCategoriesInfo categoriesInfo(const std::string &s)
00145    {
00146       std::map<std::string, ExtraCategoriesInfo>::iterator i = categoriesInfos_.find(s);
00147       if(i == categoriesInfos_.end())
00148         return IpoptCategory;
00149       return i->second;
00150    }
00151 };
00152 
00153 }/*Ends namespace Bonmin.*/
00154 #endif
00155 

Generated on Thu Jun 26 03:01:44 2008 for Bonmin by  doxygen 1.4.7