CoinUtils trunk
CoinParam.hpp
Go to the documentation of this file.
00001 /* $Id$ */
00002 #ifndef CoinParam_H
00003 #define CoinParam_H
00004 
00005 /*
00006   Copyright (C) 2002, International Business Machines
00007   Corporation and others.  All Rights Reserved.
00008 
00009   This code is licensed under the terms of the Eclipse Public License (EPL).
00010 */
00011 
00016 #include <vector>
00017 #include <string>
00018 
00074 class CoinParam
00075 {
00076  
00077 public:
00078 
00081 
00094   typedef enum { coinParamInvalid = 0,
00095                  coinParamAct, coinParamInt, coinParamDbl,
00096                  coinParamStr, coinParamKwd } CoinParamType ;
00097 
00105   typedef int (*CoinParamFunc)(CoinParam *param) ;
00106 
00108 
00115 
00118   CoinParam() ;
00119 
00126   CoinParam(std::string name, std::string help,
00127             double lower, double upper, double dflt = 0.0,
00128             bool display = true) ;
00129 
00134   CoinParam(std::string name, std::string help,
00135             int lower, int upper, int dflt = 0,
00136             bool display = true) ;
00137 
00152   CoinParam(std::string name, std::string help,
00153             std::string firstValue, int dflt, bool display = true) ;
00154 
00163   CoinParam(std::string name, std::string help,
00164             std::string dflt, bool display = true) ;
00165 
00168   CoinParam(std::string name, std::string help,
00169             bool display = true) ;
00170 
00173   CoinParam(const CoinParam &orig) ;
00174 
00177   virtual CoinParam *clone() ;
00178 
00181     CoinParam &operator=(const CoinParam &rhs) ;
00182 
00185   virtual ~CoinParam() ;
00186 
00188 
00191 
00194   void appendKwd(std::string kwd) ;
00195 
00200   int kwdIndex(std::string kwd) const ;
00201 
00205   std::string kwdVal() const ;
00206 
00213   void setKwdVal(int value, bool printIt = false) ;
00214 
00221   void setKwdVal(const std::string value ) ;
00222 
00226   void printKwds() const ;
00227 
00228 
00231   void setStrVal(std::string value) ;
00232 
00235   std::string strVal() const ;
00236 
00237 
00240   void setDblVal(double value) ;
00241 
00244   double dblVal() const ;
00245 
00246 
00249   void setIntVal(int value) ;
00250 
00253   int intVal() const ;
00254 
00255 
00258   inline void setShortHelp(const std::string help) { shortHelp_ = help ; } 
00259 
00262   inline std::string shortHelp() const { return (shortHelp_) ; } 
00263 
00269   inline void setLongHelp(const std::string help) { longHelp_ = help ; } 
00270 
00273   inline std::string longHelp() const { return (longHelp_) ; } 
00274 
00283   void printLongHelp() const ;
00284 
00286 
00289 
00292   inline CoinParamType type() const { return (type_) ; } 
00293 
00296   inline void setType(CoinParamType type) { type_ = type ; } 
00297 
00300   inline std::string  name() const { return (name_) ; } 
00301 
00304   inline void setName(std::string name) { name_ = name ; processName() ; } 
00305 
00313   int matches (std::string input) const ;
00314 
00321   std::string matchName() const ;
00322 
00329   inline void setDisplay(bool display) { display_ = display ; } 
00330 
00333   inline bool display() const { return (display_) ; } 
00334 
00337   inline CoinParamFunc pushFunc() { return (pushFunc_) ; } 
00338 
00341   inline void setPushFunc(CoinParamFunc func) { pushFunc_ = func ; }  
00342 
00345   inline CoinParamFunc pullFunc() { return (pullFunc_) ; } 
00346 
00349   inline void setPullFunc(CoinParamFunc func) { pullFunc_ = func ; } 
00350 
00352 
00353 private:
00354 
00357 
00359   void processName() ;
00360 
00362 
00365 
00366   CoinParamType type_ ;
00367 
00369   std::string name_ ;
00370 
00372   unsigned int lengthName_ ;
00373 
00377   unsigned int lengthMatch_ ;
00378 
00380   double lowerDblValue_ ;
00381 
00383   double upperDblValue_ ;
00384 
00386   double dblValue_ ;
00387 
00389   int lowerIntValue_ ;
00390 
00392   int upperIntValue_ ;
00393 
00395   int intValue_ ;
00396 
00398   std::string strValue_ ;
00399 
00401   std::vector<std::string> definedKwds_ ;
00402 
00405   int currentKwd_ ;
00406 
00408   CoinParamFunc pushFunc_ ;
00409 
00411   CoinParamFunc pullFunc_ ;
00412 
00414   std::string shortHelp_ ;
00415 
00417   std::string longHelp_ ;
00418 
00420   bool display_ ;
00422 
00423 } ;
00424 
00428 typedef std::vector<CoinParam*> CoinParamVec ;
00429 
00433 std::ostream &operator<< (std::ostream &s, const CoinParam &param) ;
00434 
00435 /*
00436   Bring in the utility functions for parameter handling (CbcParamUtils).
00437 */
00438 
00446 namespace CoinParamUtils {
00452   void setInputSrc(FILE *src) ;
00453 
00457   bool isCommandLine() ;
00458 
00462   bool isInteractive() ;
00463 
00471   std::string getStringField(int argc, const char *argv[], int *valid) ;
00472 
00480   int getIntField(int argc, const char *argv[], int *valid) ;
00481 
00489   double getDoubleField(int argc, const char *argv[], int *valid) ;
00490 
00503   int matchParam(const CoinParamVec &paramVec, std::string name,
00504                  int &matchNdx, int &shortCnt) ;
00505 
00536   std::string getCommand(int argc, const char *argv[],
00537                          const std::string prompt, std::string *pfx = 0) ;
00538 
00576   int lookupParam(std::string name, CoinParamVec &paramVec, 
00577                   int *matchCnt = 0, int *shortCnt = 0, int *queryCnt = 0) ;
00578 
00586   void printIt(const char *msg) ;
00587  void shortOrHelpOne(CoinParamVec &paramVec,int matchNdx, std::string
00604   name, int numQuery) ;
00605 
00614   void shortOrHelpMany(CoinParamVec &paramVec,
00615                        std::string name, int numQuery) ;
00616 
00622   void printGenericHelp() ;
00623 
00636   void printHelp(CoinParamVec &paramVec, int firstParam, int lastParam,
00637                  std::string prefix,
00638                  bool shortHelp, bool longHelp, bool hidden) ;
00639 }
00640 
00641 
00642 #endif  /* CoinParam_H */
00643 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines