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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #ifndef _PARAMPROC_H_
00060 #define _PARAMPROC_H__
00061
00062 #include <stdlib.h>
00063 #include <iostream>
00064 #include <string.h>
00065 #include <limits.h>
00066
00067
00069
00070
00071
00072 #include "abkstring.h"
00073 #include "abkassert.h"
00074
00075
00076 class Param
00077 {
00078 public:
00079 enum Type { NOPARAM, BOOL, INT, UNSIGNED, DOUBLE, STRING };
00080
00081
00082 private:
00083 bool _b;
00084 bool _on;
00085 int _i;
00086 unsigned _u;
00087 double _d;
00088 const char * _s;
00089 Type _pt;
00090 const char * _key;
00091 public:
00092 Param(const char * keyy, Type part, int argc, const char * const argv[]);
00093 Param(Type part, int argc, const char * const argv[]);
00094 ~Param() {};
00095 bool found() const;
00096
00097 bool on() const;
00098
00099
00100 int getInt() const;
00101 unsigned getUnsigned() const;
00102 double getDouble() const;
00103 const char* getString() const;
00104
00105
00106
00107 };
00108
00109
00110
00111 class NoParams : private Param
00112 {
00113 public:
00114 NoParams(int argc, const char * const argv[]):Param(Param::NOPARAM,argc,argv) {}
00115 bool found() const { return Param::found(); }
00116 operator bool() const { return Param::found(); }
00117 Param::on;
00118 };
00119
00120
00121 class BoolParam : private Param
00122 {
00123 public:
00124 BoolParam(const char * key, int argc, const char * const argv[])
00125 : Param(key,Param::BOOL,argc,argv) {}
00126 bool found() const { return Param::found(); }
00127 operator bool() const { return Param::found(); }
00128 Param::on;
00129 };
00130
00131
00132 class UnsignedParam : private Param
00133 {
00134 public:
00135 UnsignedParam(const char * key, int argc, const char *const argv[])
00136 : Param(key,Param::UNSIGNED,argc,argv) {}
00137 bool found() const { return Param::found() && getUnsigned()!=unsigned(-1); }
00138 operator unsigned() const { return getUnsigned(); }
00139 Param::on;
00140 };
00141
00142
00143 class IntParam : private Param
00144 {
00145 public:
00146 IntParam(const char * key, int argc, const char * const argv[])
00147 : Param(key,Param::INT,argc,argv) {}
00148 bool found() const { return Param::found(); }
00149 operator int() const { return getInt(); }
00150 Param::on;
00151 };
00152
00153
00154 class DoubleParam : private Param
00155 {
00156 public:
00157 DoubleParam(const char * key, int argc, const char * const argv[])
00158 : Param(key,Param::DOUBLE,argc,argv) {}
00159 bool found() const { return Param::found() && getDouble()!=-1.29384756657; }
00160 operator double() const { return getDouble(); }
00161 Param::on;
00162 };
00163
00164
00165 class StringParam : private Param
00166 {
00167 public:
00168 StringParam(const char * key, int argc, const char * const argv[])
00169 : Param(key,Param::STRING,argc,argv) {}
00170 bool found() const
00171 { return Param::found() && strcmp(getString(),"Uninitialized"); }
00172 operator const char*() const { return getString(); }
00173 Param::on;
00174 };
00175
00176 #endif