00001 #ifndef OBT_OPTION_ARG_HANDLER_H
00002 #define OBT_OPTION_ARG_HANDLER_H
00003
00004 #include "OBT.h"
00005 #include <list>
00006 #include <vector>
00007 #include <string>
00008 #include <cstdlib>
00009
00010 namespace OBT
00011 {
00012
00013 class OptionArg ;
00014 class OptionArgHandler ;
00015 class ArgsOp ;
00016 typedef std::list< OptionArg* > ListArg ;
00017 typedef std::list< ArgsOp* > ArgsOpList ;
00018
00019 OBT_API OptionArgHandler& operator < ( OptionArg& o1, OptionArg& o2 ) ;
00020 OBT_API OptionArgHandler& operator < ( OptionArgHandler& h, OptionArg& o ) ;
00021 OBT_API OptionArgHandler& operator ^ ( OptionArg& o1, OptionArg& o2 ) ;
00022 OBT_API OptionArgHandler& operator ^ ( OptionArgHandler& h, OptionArg& o ) ;
00023 OBT_API OptionArgHandler& operator & ( OptionArg& o1, OptionArg& o2 ) ;
00024 OBT_API OptionArgHandler& operator & ( OptionArgHandler& h, OptionArg& o ) ;
00025 OBT_API OptionArgHandler& operator | ( OptionArg& o1, OptionArg& o2 ) ;
00026 OBT_API OptionArgHandler& operator | ( OptionArgHandler& h, OptionArg& o ) ;
00084 class OBT_API OptionArgHandler
00085 {
00086 protected:
00088 OptionArgHandler() ;
00089 public:
00091 virtual ~OptionArgHandler() ;
00102 int parse( int argc, char* argv[], bool showUsageAndExit = true, int firstArg = 1 ) ;
00106 int parse( const std::vector< std::string >& args, bool showUsageAndExit = true, int firstArg = 1 ) ;
00111 int parse( const std::string& args, bool showUsageAndExit = true, int firstArg = 1 ) ;
00115 int parseFile( const char* file, bool showUsageAndExit = true ) ;
00118 void reset() ;
00120 void showUsage( bool quit = true ) const { usage() ; if( quit ) { exit( 1 ) ; } }
00123 static OptionArgHandler& get() ;
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 friend OBT_API OptionArgHandler& operator < ( OptionArg& o1, OptionArg& o2 ) ;
00155 friend OBT_API OptionArgHandler& operator < ( OptionArgHandler& h, OptionArg& o ) ;
00173 friend OBT_API OptionArgHandler& operator ^ ( OptionArg& o1, OptionArg& o2 ) ;
00175 friend OBT_API OptionArgHandler& operator ^ ( OptionArgHandler& h, OptionArg& o ) ;
00197 friend OBT_API OptionArgHandler& operator & ( OptionArg& o1, OptionArg& o2 ) ;
00199 friend OBT_API OptionArgHandler& operator & ( OptionArgHandler& h, OptionArg& o ) ;
00221 friend OBT_API OptionArgHandler& operator | ( OptionArg& o1, OptionArg& o2 ) ;
00223 friend OBT_API OptionArgHandler& operator | ( OptionArgHandler& h, OptionArg& o ) ;
00225 protected:
00229 virtual void usage() const ;
00230 private:
00231 friend class ArgsOp ;
00232 void addOp( ArgsOp* op ) ;
00233 void addOp( OptionArg& o ) ;
00234 ArgsOpList _argOpList ;
00235 protected:
00236 friend class OptionArg ;
00237 friend class OtherOptionArg ;
00239 std::vector< std::string > _args ;
00241 std::size_t _argIterator ;
00243 ListArg _optionList ;
00245 static OptionArgHandler* _currentHandler ;
00246 } ;
00247 }
00248
00249 #endif // OBT_OPTION_ARG_HANDLER_H