20#ifndef Minisat_Options_h
21#define Minisat_Options_h
40extern int parseOptions (
int& argc,
char** argv,
bool strict =
false);
59 static const char*&
getUsageString() {
static const char* usage_str;
return usage_str; }
60 static const char*&
getHelpPrefixString() {
static const char* help_prefix_str =
"";
return help_prefix_str; }
84 virtual bool parse (
const char* str) = 0;
85 virtual void help (
bool verbose =
false) = 0;
135 operator double (
void)
const {
return value; }
136 operator double& (void) {
return value; }
139 virtual bool parse(
const char* str){
140 const char* span = str;
142 if (!match(span,
"-") || !match(span,
name) || !match(span,
"="))
146 double tmp = strtod(span, &end);
150 else if (tmp >=
range.end && (!
range.end_inclusive || tmp !=
range.end)){
151 fprintf(stderr,
"ERROR! value <%s> is too large for option \"%s\".\n", span,
name);
153 }
else if (tmp <=
range.begin && (!
range.begin_inclusive || tmp !=
range.begin)){
154 fprintf(stderr,
"ERROR! value <%s> is too small for option \"%s\".\n", span,
name);
163 virtual void help (
bool verbose =
false){
164 fprintf(stderr,
" -%-12s = %-8s %c%4.2g .. %4.2g%c (default: %g)\n",
166 range.begin_inclusive ?
'[' :
'(',
169 range.end_inclusive ?
']' :
')',
173 fprintf(stderr,
"\n");
193 operator int32_t (
void)
const {
return value; }
194 operator int32_t& (void) {
return value; }
197 virtual bool parse(
const char* str){
198 const char* span = str;
200 if (!match(span,
"-") || !match(span,
name) || !match(span,
"="))
204 int32_t tmp = strtol(span, &end, 10);
208 else if (tmp >
range.end){
209 fprintf(stderr,
"ERROR! value <%s> is too large for option \"%s\".\n", span,
name);
211 }
else if (tmp <
range.begin){
212 fprintf(stderr,
"ERROR! value <%s> is too small for option \"%s\".\n", span,
name);
220 virtual void help (
bool verbose =
false){
223 fprintf(stderr,
"imin");
225 fprintf(stderr,
"%4d",
range.begin);
227 fprintf(stderr,
" .. ");
229 fprintf(stderr,
"imax");
231 fprintf(stderr,
"%4d",
range.end);
233 fprintf(stderr,
"] (default: %d)\n",
value);
236 fprintf(stderr,
"\n");
313 StringOption(
const char* c,
const char* n,
const char* d,
const char* def = NULL)
314 :
Option(n, d, c,
"<string>"), value(def) {}
316 operator const char* (void)
const {
return value; }
317 operator const char*& (void) {
return value; }
320 virtual bool parse(
const char* str){
321 const char* span = str;
323 if (!match(span,
"-") || !match(span,
name) || !match(span,
"="))
330 virtual void help (
bool verbose =
false){
334 fprintf(stderr,
"\n");
349 BoolOption(
const char* c,
const char* n,
const char* d,
bool v)
350 :
Option(n, d, c,
"<bool>"), value(v) {}
352 operator bool (
void)
const {
return value; }
353 operator bool& (void) {
return value; }
356 virtual bool parse(
const char* str){
357 const char* span = str;
359 if (match(span,
"-")){
360 bool b = !match(span,
"no-");
370 virtual void help (
bool verbose =
false){
372 fprintf(stderr,
" -%s, -no-%s",
name,
name);
375 fprintf(stderr,
" ");
377 fprintf(stderr,
" ");
378 fprintf(stderr,
"(default: %s)\n", value ?
"on" :
"off");
381 fprintf(stderr,
"\n");
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
BoolOption(const char *c, const char *n, const char *d, bool v)
BoolOption & operator=(bool b)
virtual void help(bool verbose=false)
virtual bool parse(const char *str)
virtual bool parse(const char *str)
virtual void help(bool verbose=false)
DoubleOption & operator=(double x)
DoubleOption(const char *c, const char *n, const char *d, double def=double(), DoubleRange r=DoubleRange(-HUGE_VAL, false, HUGE_VAL, false))
virtual bool parse(const char *str)
IntOption & operator=(int32_t x)
virtual void help(bool verbose=false)
IntOption(const char *c, const char *n, const char *d, int32_t def=int32_t(), IntRange r=IntRange(INT32_MIN, INT32_MAX))
virtual bool parse(const char *str)=0
virtual void help(bool verbose=false)=0
Option(const char *name_, const char *desc_, const char *cate_, const char *type_)
friend int printUsageAndExit(int argc, char **argv, bool verbose)
static const char *& getUsageString()
friend int parseOptions(int &argc, char **argv, bool strict)
static const char *& getHelpPrefixString()
friend void setHelpPrefixStr(const char *str)
static vec< Option * > & getOptionList()
friend void setUsageHelp(const char *str)
virtual bool parse(const char *str)
StringOption & operator=(const char *x)
virtual void help(bool verbose=false)
StringOption(const char *c, const char *n, const char *d, const char *def=NULL)
void setUsageHelp(const char *str)
int printUsageAndExit(int argc, char **argv, bool verbose=false)
void setHelpPrefixStr(const char *str)
int parseOptions(int &argc, char **argv, bool strict=false)
DoubleRange(double b, bool binc, double e, bool einc)
Int64Range(int64_t b, int64_t e)
bool operator()(const Option *x, const Option *y)