/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/Common/IpOptionsList.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2004, 2006 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpOptionsList.hpp 956 2007-04-03 17:24:28Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
00008 
00009 #ifndef __IPOPTLIST_HPP__
00010 #define __IPOPTLIST_HPP__
00011 
00012 #include "IpUtils.hpp"
00013 #include "IpReferenced.hpp"
00014 #include "IpException.hpp"
00015 #include "IpRegOptions.hpp"
00016 
00017 #include <iostream>
00018 #include <map>
00019 
00020 namespace Ipopt
00021 {
00023   DECLARE_STD_EXCEPTION(OPTION_INVALID);
00024 
00032   class OptionsList : public ReferencedObject
00033   {
00036     class OptionValue
00037     {
00038     public:
00042       OptionValue()
00043           :
00044           initialized_(false)
00045       {}
00046 
00048       OptionValue(std::string value, bool allow_clobber, bool dont_print)
00049           :
00050           value_(value),
00051           counter_(0),
00052           initialized_(true),
00053           allow_clobber_(allow_clobber),
00054           dont_print_(dont_print)
00055       {}
00056 
00058       OptionValue(const OptionValue& copy)
00059           :
00060           value_(copy.value_),
00061           counter_(copy.counter_),
00062           initialized_(copy.initialized_),
00063           allow_clobber_(copy.allow_clobber_),
00064           dont_print_(copy.dont_print_)
00065       {}
00066 
00068       void operator=(const OptionValue& copy)
00069       {
00070         value_=copy.value_;
00071         counter_=copy.counter_;
00072         initialized_=copy.initialized_;
00073         allow_clobber_=copy.allow_clobber_;
00074         dont_print_=copy.dont_print_;
00075       }
00076 
00078       ~OptionValue()
00079       {}
00081 
00084       std::string GetValue() const
00085       {
00086         DBG_ASSERT(initialized_);
00087         counter_++;
00088         return value_;
00089       }
00090 
00093       std::string Value() const
00094       {
00095         DBG_ASSERT(initialized_);
00096         return value_;
00097       }
00098 
00100       Index Counter() const
00101       {
00102         DBG_ASSERT(initialized_);
00103         return counter_;
00104       }
00105 
00107       bool AllowClobber() const
00108       {
00109         DBG_ASSERT(initialized_);
00110         return allow_clobber_;
00111       }
00112 
00115       bool DontPrint() const
00116       {
00117         DBG_ASSERT(initialized_);
00118         return dont_print_;
00119       }
00120 
00121     private:
00123       std::string value_;
00124 
00126       mutable Index counter_;
00127 
00129       bool initialized_;
00130 
00132       bool allow_clobber_;
00133 
00136       bool dont_print_;
00137     };
00138 
00139   public:
00142     OptionsList(SmartPtr<RegisteredOptions> reg_options, SmartPtr<Journalist> jnlst)
00143         : reg_options_(reg_options), jnlst_(jnlst)
00144     {}
00145 
00146     OptionsList()
00147     {}
00148 
00150     OptionsList(const OptionsList& copy)
00151     {
00152       // copy all the option strings and values
00153       options_ = copy.options_;
00154       // copy the registered options pointer
00155       reg_options_ = copy.reg_options_;
00156     }
00157 
00159     virtual ~OptionsList()
00160     {}
00161 
00163     void operator=(const OptionsList& source)
00164     {
00165       options_ = source.options_;
00166       reg_options_ = source.reg_options_;
00167       jnlst_ = source.jnlst_;
00168     }
00170 
00172     void clear()
00173     {
00174       options_.clear();
00175     }
00176 
00179     void SetRegisteredOptions(const SmartPtr<RegisteredOptions> reg_options)
00180     {
00181       reg_options_ = reg_options;
00182     }
00183     void SetJournalist(const SmartPtr<Journalist> jnlst)
00184     {
00185       jnlst_ = jnlst;
00186     }
00188 
00190     bool SetStringValue(const std::string& tag, const std::string& value,
00191                         bool allow_clobber = true, bool dont_print = false);
00192     bool SetNumericValue(const std::string& tag, Number value,
00193                          bool allow_clobber = true, bool dont_print = false);
00194     bool SetIntegerValue(const std::string& tag, Index value,
00195                          bool allow_clobber = true, bool dont_print = false);
00197 
00201     bool SetStringValueIfUnset(const std::string& tag, const std::string& value,
00202                                bool allow_clobber = true, bool dont_print = false);
00203     bool SetNumericValueIfUnset(const std::string& tag, Number value,
00204                                 bool allow_clobber = true, bool dont_print = false);
00205     bool SetIntegerValueIfUnset(const std::string& tag, Index value,
00206                                 bool allow_clobber = true, bool dont_print = false);
00208 
00213     bool GetStringValue(const std::string& tag, std::string& value,
00214                         const std::string& prefix) const;
00215     bool GetEnumValue(const std::string& tag, Index& value,
00216                       const std::string& prefix) const;
00217     bool GetBoolValue(const std::string& tag, bool& value,
00218                       const std::string& prefix) const;
00219     bool GetNumericValue(const std::string& tag, Number& value,
00220                          const std::string& prefix) const;
00221     bool GetIntegerValue(const std::string& tag, Index& value,
00222                          const std::string& prefix) const;
00224 
00226     void PrintList(std::string& list) const;
00227 
00231     void PrintUserOptions(std::string& list) const;
00232 
00235     bool ReadFromStream(const Journalist& jnlst, std::istream& is);
00236 
00237   private:
00247     //    OptionsList();
00248 
00250 
00252     std::map< std::string, OptionValue > options_;
00253 
00255     SmartPtr<RegisteredOptions> reg_options_;
00256 
00258     SmartPtr<Journalist> jnlst_;
00259 
00262     const std::string& lowercase(const std::string tag) const;
00263 
00270     bool find_tag(const std::string& tag, const std::string& prefix,
00271                   std::string& value) const;
00272 
00277     bool will_allow_clobber(const std::string& tag) const;
00278 
00281     bool readnexttoken(std::istream& is, std::string& token);
00282 
00284     mutable std::string lowercase_buffer_;
00285   };
00286 
00287 } // namespace Ipopt
00288 
00289 #endif

Generated on Sun Nov 14 14:06:35 2010 for Coin-All by  doxygen 1.4.7