00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef XRDMONARGPARSER_HH
00014 #define XRDMONARGPARSER_HH
00015
00016 #include <stdio.h>
00017 #include <string>
00018 #include <vector>
00019 using std::string;
00020 using std::vector;
00021
00022 class XrdMonArgParser {
00023 public:
00024 class Arg {
00025 public:
00026 virtual ~Arg() {}
00027 virtual int parseArgs(int argc, char* argv[], int curArg) = 0;
00028 virtual void throwIfRequiredButNotSet() = 0;
00029 };
00030
00031 template <typename T, class C>
00032 class ArgImpl : public Arg {
00033 public:
00034 ArgImpl(const char* theSwitch,
00035 T defaultValue,
00036 bool required = false);
00037 virtual ~ArgImpl() {}
00038 virtual int parseArgs(int argc, char* argv[], int curArg);
00039 virtual void throwIfRequiredButNotSet();
00040 T myVal() { return _value; }
00041
00042 private:
00043 T _value;
00044 const string _switch;
00045 bool _done;
00046 bool _required;
00047 };
00048
00049 XrdMonArgParser();
00050 ~XrdMonArgParser();
00051
00052 void registerExpectedArg(Arg* arg);
00053 void parseArguments(int argc, char* argv[]);
00054
00055 private:
00056 vector<Arg*> _args;
00057 };
00058
00059 #include "XrdMon/XrdMonArgParser.icc"
00060
00061 #endif