00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _arguments_h
00018 #define _arguments_h
00019
00020 #include <spl/types.h>
00021 #include <spl/Debug.h>
00022 #include <spl/String.h>
00023 #include <spl/collection/Hashtable.h>
00024 #include <spl/Memory.h>
00025 #include <spl/RefCountPtr.h>
00026 #include <spl/collection/Vector.h>
00027
00033 class CommandLine;
00034 typedef RefCountPtr<CommandLine> CommandLinePtr;
00035
00043 class CommandLine : public IMemoryValidate
00044 {
00045 protected:
00046 Vector<String> m_switches;
00047 Hashtable<String, String> m_switchIdx;
00048 Vector<String> m_args;
00049
00050 String ParseValue( const String& str, const bool unixStyle );
00051
00052 public:
00053 CommandLine();
00054 CommandLine(const CommandLine& cl);
00055 CommandLine(const int argc, const char **argv);
00056 virtual ~CommandLine();
00057
00058 CommandLine& operator =(const CommandLine& cl);
00059
00060 bool Parse(const int argc, const char **argv);
00061 void Clear();
00062
00063 inline bool HasSwitch(const String& argNoDashOrSlash) const { return m_switchIdx.ContainsKey(argNoDashOrSlash); }
00064 inline String& GetSwitch(const String argNoDashOrSlash) const { return m_switchIdx.GetRef(argNoDashOrSlash); }
00065 String& GetSwitch(const String& argNoDashOrSlash, const String& defValue);
00066 inline String& GetSwitch(const int idx) const { return m_switches.ElementAtRef(idx); }
00067 inline String& GetArg(int idx) const { ASSERT(idx < m_args.Count()); return m_args.ElementAtRef(idx); }
00068 inline int GetArgCount() const { return m_args.Count(); }
00069 inline int GetSwitchCount() const { return m_switchIdx.Count(); }
00070 void SetSwitch(const String& key, const String& value);
00071
00072 #ifdef DEBUG
00073 void ValidateMem() const;
00074 void CheckMem() const;
00075 #endif
00076 };
00077
00078 REGISTER_TYPEOF( 408, CommandLine );
00079
00082 #endif