IpOptionsList.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2006 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpOptionsList.hpp 1861 2010-12-21 21:34:47Z andreasw $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8 
9 #ifndef __IPOPTLIST_HPP__
10 #define __IPOPTLIST_HPP__
11 
12 #include "IpUtils.hpp"
13 #include "IpReferenced.hpp"
14 #include "IpException.hpp"
15 #include "IpRegOptions.hpp"
16 
17 #include <iostream>
18 #include <map>
19 
20 namespace Ipopt
21 {
23  DECLARE_STD_EXCEPTION(OPTION_INVALID);
24 
33  {
37  {
38  public:
43  :
44  initialized_(false)
45  {}
46 
48  OptionValue(std::string value, bool allow_clobber, bool dont_print)
49  :
50  value_(value),
51  counter_(0),
52  initialized_(true),
53  allow_clobber_(allow_clobber),
54  dont_print_(dont_print)
55  {}
56 
58  OptionValue(const OptionValue& copy)
59  :
60  value_(copy.value_),
61  counter_(copy.counter_),
65  {}
66 
68  void operator=(const OptionValue& copy)
69  {
70  value_=copy.value_;
71  counter_=copy.counter_;
75  }
76 
79  {}
81 
84  std::string GetValue() const
85  {
87  counter_++;
88  return value_;
89  }
90 
93  std::string Value() const
94  {
96  return value_;
97  }
98 
100  Index Counter() const
101  {
103  return counter_;
104  }
105 
107  bool AllowClobber() const
108  {
110  return allow_clobber_;
111  }
112 
115  bool DontPrint() const
116  {
118  return dont_print_;
119  }
120 
121  private:
123  std::string value_;
124 
126  mutable Index counter_;
127 
130 
133 
137  };
138 
139  public:
143  : reg_options_(reg_options), jnlst_(jnlst)
144  {}
145 
147  {}
148 
151  {
152  // copy all the option strings and values
153  options_ = copy.options_;
154  // copy the registered options pointer
155  reg_options_ = copy.reg_options_;
156  }
157 
159  virtual ~OptionsList()
160  {}
161 
163  virtual void operator=(const OptionsList& source)
164  {
165  options_ = source.options_;
166  reg_options_ = source.reg_options_;
167  jnlst_ = source.jnlst_;
168  }
170 
172  virtual void clear()
173  {
174  options_.clear();
175  }
176 
179  virtual void SetRegisteredOptions(const SmartPtr<RegisteredOptions> reg_options)
180  {
181  reg_options_ = reg_options;
182  }
183  virtual void SetJournalist(const SmartPtr<Journalist> jnlst)
184  {
185  jnlst_ = jnlst;
186  }
188 
190  virtual bool SetStringValue(const std::string& tag, const std::string& value,
191  bool allow_clobber = true, bool dont_print = false);
192  virtual bool SetNumericValue(const std::string& tag, Number value,
193  bool allow_clobber = true, bool dont_print = false);
194  virtual bool SetIntegerValue(const std::string& tag, Index value,
195  bool allow_clobber = true, bool dont_print = false);
197 
201  virtual bool SetStringValueIfUnset(const std::string& tag, const std::string& value,
202  bool allow_clobber = true, bool dont_print = false);
203  virtual bool SetNumericValueIfUnset(const std::string& tag, Number value,
204  bool allow_clobber = true, bool dont_print = false);
205  virtual bool SetIntegerValueIfUnset(const std::string& tag, Index value,
206  bool allow_clobber = true, bool dont_print = false);
208 
213  virtual bool GetStringValue(const std::string& tag, std::string& value,
214  const std::string& prefix) const;
215  virtual bool GetEnumValue(const std::string& tag, Index& value,
216  const std::string& prefix) const;
217  virtual bool GetBoolValue(const std::string& tag, bool& value,
218  const std::string& prefix) const;
219  virtual bool GetNumericValue(const std::string& tag, Number& value,
220  const std::string& prefix) const;
221  virtual bool GetIntegerValue(const std::string& tag, Index& value,
222  const std::string& prefix) const;
224 
226  virtual void PrintList(std::string& list) const;
227 
231  virtual void PrintUserOptions(std::string& list) const;
232 
235  virtual bool ReadFromStream(const Journalist& jnlst, std::istream& is);
236 
237  private:
247  // OptionsList();
248 
250 
252  std::map< std::string, OptionValue > options_;
253 
256 
259 
262  const std::string& lowercase(const std::string tag) const;
263 
270  bool find_tag(const std::string& tag, const std::string& prefix,
271  std::string& value) const;
272 
277  bool will_allow_clobber(const std::string& tag) const;
278 
281  bool readnexttoken(std::istream& is, std::string& token);
282 
284  mutable std::string lowercase_buffer_;
285  };
286 
287 } // namespace Ipopt
288 
289 #endif