See

<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”/>