00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #if !defined(MYSQLPP_CMDLINE_H)
00030 #define MYSQLPP_CMDLINE_H
00031
00032 #include "common.h"
00033
00034 #include <string>
00035 #include <vector>
00036
00037 #include <assert.h>
00038
00039 namespace mysqlpp {
00044 class MYSQLPP_EXPORT CommandLineBase
00045 {
00046 public:
00049 typedef std::vector<std::string> ArgumentList;
00051 typedef ArgumentList::const_iterator ArgumentListIt;
00052
00056 const ArgumentList& extra_args() const
00057 { return extra_args_; }
00058
00061 operator void*() const
00062 {
00063 return successful_ ? const_cast<bool*>(&successful_) : 0;
00064 }
00065
00066 protected:
00069 CommandLineBase(int argc, char* const argv[], const char* opts) :
00070 argc_(argc),
00071 argv_(argv),
00072 opts_(opts),
00073 successful_(argc > 0 && argv && opts)
00074 {
00075 assert(successful_);
00076 }
00078 virtual ~CommandLineBase() { }
00079
00083 void finish_parse();
00084
00086 const char* option_argument() const;
00088 int option_index() const;
00089
00095 void parse_error(const char* message = 0);
00096
00098 int parse_next() const;
00099
00101 virtual void print_usage() const = 0;
00102
00104 const char* program_name() const { return argv_[0]; }
00105
00108 bool successful() const { return successful_; }
00109
00110 private:
00112 int argc_;
00113 char* const* argv_;
00114 const char* opts_;
00115 bool successful_;
00116 ArgumentList extra_args_;
00117 };
00118
00119
00121 namespace examples {
00123 extern MYSQLPP_EXPORT const char* db_name;
00124
00126 class MYSQLPP_EXPORT CommandLine : public CommandLineBase
00127 {
00128 public:
00131 CommandLine(int argc, char* const argv[],
00132 const char* user = 0, const char* pass = 0,
00133 const char* usage_extra = 0);
00134
00139 void print_usage() const { print_usage(usage_extra_); }
00140
00144 void print_usage(const char* extra) const;
00145
00150 bool dtest_mode() const { return dtest_mode_; }
00151
00153 const char* pass() const { return pass_; }
00154
00160 int run_mode() const { return run_mode_; }
00161
00163 const char* server() const { return server_; }
00164
00166 const char* user() const { return user_; }
00167
00168 private:
00170
00171 bool dtest_mode_;
00172 int run_mode_;
00173 const char* server_;
00174 const char* user_;
00175 const char* pass_;
00176 const char* usage_extra_;
00177 };
00178 }
00179
00180
00182 namespace ssqlsxlat {
00184 class MYSQLPP_EXPORT CommandLine : public CommandLineBase
00185 {
00186 public:
00189 enum SourceSink {
00190 ss_unknown,
00191 ss_ssqls1,
00192 ss_ssqls2,
00193 ss_table
00194 };
00195
00198 CommandLine(int argc, char* const argv[]);
00199
00201 void print_usage() const;
00202
00207 const char* input() const { return input_; }
00208
00210 SourceSink input_source() const { return input_source_; }
00211
00213 SourceSink output_sink() const { return output_sink_; }
00214
00216 const char* output() const { return output_; }
00217
00219 const char* pass() const { return pass_; }
00220
00222 const char* server() const { return server_; }
00223
00225 const char* user() const { return user_; }
00226
00227 private:
00229 const char* input_;
00230 const char* output_;
00231 const char* pass_;
00232 const char* server_;
00233 const char* user_;
00234 SourceSink input_source_;
00235 SourceSink output_sink_;
00236 };
00237 }
00238 }
00239
00240 #endif // !defined(MYSQLPP_CMDLINE_H)
00241