See
- The implementation parameters.cpp
- The description Parameters
<project-file type=“source”/> <content> #ifndef PARAMETERS_H #define PARAMETERS_H
#include <simdistribution.h> #include <string> #include <map> #include <ostream>
class Argument { public:
typedef enum { NOT_REQUIRED, REQUIRED } Requirement; Argument(const char *name, const char *help, Requirement required); virtual ~Argument();
virtual const char *parsable(const char*) const; virtual bool parse(const char*) = 0; virtual void formatHelp(std::ostream &stream) const = 0;
void setError(const char *); const char *error() const { return Error; } const char *name() const { return Name; } bool required() const { return Required == REQUIRED; } bool set() const { return Set; } void setParsed(bool parsed) { Set = parsed; }
protected:
bool Required; char *Name; char *Help; char *Error; bool Set;
};
class IntArgument : public Argument { public:
IntArgument(const char *name, const char *help, Requirement required, int defaultvalue = 0);
virtual bool parse(const char*); virtual void formatHelp(std::ostream &stream) const; int value() const { return Value; }
protected:
int Value;
};
class FloatArgument : public Argument { public:
FloatArgument(const char *name, const char *help, Requirement required, float defaultvalue = 0);
virtual bool parse(const char*); virtual void formatHelp(std::ostream &stream) const; float value() const { return Value; }
protected:
float Value;
};
class BoolArgument : public Argument { public:
BoolArgument(const char *name, const char *help, Requirement required, bool defaultvalue = false);
virtual bool parse(const char*); virtual void formatHelp(std::ostream &stream) const; bool value() const { return Value; }
protected:
bool Value;
};
class LongArgument : public Argument { public:
LongArgument(const char *name, const char *help, Requirement required, long defaultvalue = 0);
virtual bool parse(const char*); virtual void formatHelp(std::ostream &stream) const; long value() const { return Value; }
protected:
long Value;
};
class StringArgument : public Argument { public:
StringArgument(const char *name, const char *help, Requirement required, const char *defaultvalue = NULL); virtual ~StringArgument(); virtual bool parse(const char*); virtual void formatHelp(std::ostream &stream) const; const char *value() const { return Value; }
protected:
char *Value;
};
class DistributionArgument : public Argument { public:
DistributionArgument(const char *name, const char *help, Requirement required, SimDistribution *defaultvalue = NULL); virtual ~DistributionArgument(); virtual bool parse(const char*); virtual void formatHelp(std::ostream &stream) const; static void formatDistributionHelp(std::ostream &stream); SimDistribution *value() const { return Value; } void setEnableExp(bool enable) { EnableExp = enable; } void setEnableGamma(bool enable) { EnableGamma = enable; } void setEnableNormal(bool enable) { EnableNormal = enable; } void setEnableDiscrete(bool enable) { EnableDiscrete = enable; } void setEnableNULL(bool enable) { EnableNULL = enable; }
protected:
SimDistribution *Value; bool EnableExp; bool EnableGamma; bool EnableNormal; bool EnableDiscrete; bool EnableNULL;
};
class Parameters { public:
Parameters(); virtual ~Parameters();
virtual bool parse(int args, const char *argv[]); virtual bool parseFile(const char *file); virtual void usage(const char *program_name) const;
void addArgument(Argument &); bool set(const char *name) const; const Argument *value(const char *name) const; const IntArgument *intValue(const char *name) const; const LongArgument *longValue(const char *name) const; const FloatArgument *floatValue(const char *name) const; const BoolArgument *boolValue(const char *name) const; const StringArgument *stringValue(const char *name) const; const DistributionArgument *distributionValue(const char *name) const;
protected:
std::map<std::string, Argument*> Arguments; virtual bool parseArgument(const char *arg);
};
#endif </content> <use name=“simdistribution.h”/>