00001
00002 #ifndef CoinParam_H
00003 #define CoinParam_H
00004
00005
00006
00007
00008
00009
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 size_t lengthName_ ;
00373
00377 size_t 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 ¶m) ;
00434
00435
00436
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 ¶mVec, 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 ¶mVec,
00577 int *matchCnt = 0, int *shortCnt = 0, int *queryCnt = 0) ;
00578
00586 void printIt(const char *msg) ;
00587 void shortOrHelpOne(CoinParamVec ¶mVec,int matchNdx, std::string
00604 name, int numQuery) ;
00605
00614 void shortOrHelpMany(CoinParamVec ¶mVec,
00615 std::string name, int numQuery) ;
00616
00622 void printGenericHelp() ;
00623
00636 void printHelp(CoinParamVec ¶mVec, int firstParam, int lastParam,
00637 std::string prefix,
00638 bool shortHelp, bool longHelp, bool hidden) ;
00639 }
00640
00641
00642 #endif
00643