00001 #ifndef EDG_WORKLOAD_COMMON_UTILITIES_LINEPARSEREXCEPTIONS_H
00002 #define EDG_WORKLOAD_COMMON_UTILITIES_LINEPARSEREXCEPTIONS_H
00003
00004 #include <exception>
00005
00006 COMMON_NAMESPACE_BEGIN {
00007
00008 namespace utilities {
00009
00010 class LineParsingError : public std::exception {
00011 public:
00012 LineParsingError( const ParserData &d, int code );
00013 LineParsingError( const LineParsingError &lpe );
00014 virtual ~LineParsingError( void ) throw();
00015
00016 virtual void usage( std::ostream &os ) const = 0;
00017 virtual const char *what( void ) const throw();
00018
00019 inline int return_code( void ) { return this->lpe_retcode; }
00020
00021 private:
00022 LineParsingError &operator=( const LineParsingError & );
00023
00024 protected:
00025 int lpe_retcode;
00026 const ParserData &lpe_data;
00027
00028 static const char *lpe_s_what;
00029 };
00030
00031 class ShowHelp : public LineParsingError {
00032 public:
00033 ShowHelp( const ParserData &d );
00034 ShowHelp( const ShowHelp &sh );
00035 virtual ~ShowHelp( void ) throw();
00036
00037 virtual void usage( std::ostream &os ) const;
00038 };
00039
00040 class InvalidOption : public LineParsingError {
00041 public:
00042 InvalidOption( const ParserData &d, int opt );
00043 InvalidOption( const InvalidOption &io );
00044 virtual ~InvalidOption( void ) throw();
00045
00046 virtual void usage( std::ostream &os ) const;
00047
00048 private:
00049 int io_opt;
00050 };
00051
00052 class InvalidArgNumber : public LineParsingError {
00053 public:
00054 InvalidArgNumber( const ParserData &d, int argn );
00055 InvalidArgNumber( const InvalidArgNumber &ian );
00056 virtual ~InvalidArgNumber( void ) throw();
00057
00058 virtual void usage( std::ostream &os ) const;
00059
00060 private:
00061 int ian_argn;
00062 };
00063
00064 };
00065
00066 } COMMON_NAMESPACE_END;
00067
00068 inline std::ostream &operator<<( std::ostream &os, const edg::workload::common::utilities::LineParsingError &lpe )
00069 { lpe.usage( os ); return os; }
00070
00071 #endif
00072
00073
00074
00075