00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __UT_WorkArgs__
00022 #define __UT_WorkArgs__
00023
00024 #include "UT_API.h"
00025 #include <stdlib.h>
00026 #include <vector>
00027 #include <string>
00028 #include "UT_Assert.h"
00029
00030 #define UT_INITIAL_ARGV_SIZE 256
00031
00032 class UT_API UT_WorkArgs {
00033 public:
00034 UT_WorkArgs();
00035 ~UT_WorkArgs();
00036
00037 void *operator new(size_t size);
00038 void operator delete(void *memory);
00039
00040 void appendArg(char *text) { setArg(myArgc, text); }
00041 void setArg(int idx, char *text);
00042
00043 int getArgc() const { return myArgc; }
00044 char *getArg(int idx) { return myArgv[idx]; }
00045 const char *getArg(int idx) const { return myArgv[idx]; }
00046 char **getArgv() { return myArgv; }
00047 const char **getArgv() const { return (const char **)myArgv; }
00048
00049 char *operator[](int i)
00050 { return (i < myArgc) ? myArgv[i]:0; }
00051 char *operator()(int i)
00052 { UT_ASSERT_P(i <= myArgc); return myArgv[i]; }
00053
00054 const char *operator[](int i) const
00055 { return (i < myArgc) ? myArgv[i]:0; }
00056 const char *operator()(int i) const
00057 { UT_ASSERT_P(i <= myArgc); return myArgv[i]; }
00058
00059 UT_WorkArgs( const UT_WorkArgs © );
00060 UT_WorkArgs &operator=( const UT_WorkArgs © );
00061
00062 void toStringVector(std::vector < std::string >& tokens_out);
00063
00064 private:
00065 void reserve( int num_elems );
00066 private:
00067 char **myArgv;
00068 int myArgc, myAlloc;
00069 char *myStackArgv[UT_INITIAL_ARGV_SIZE];
00070 };
00071
00072 #endif