00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef iDateTimeMyFMT
00019
00020 #define iDateTimeMyFMT "%Y-%m-%d %H:%M"
00021 #define iDateMyFMT "%Y-%m-%d"
00022 #define iTimeMyFMT "%I:%M %p"
00023
00024 #endif
00025
00026
00027 typedef long long identifier;
00028
00029
00030 typedef long long llong;
00031
00032
00033
00034
00035 class dataXfer
00036 {
00037 protected:
00038 string m_name;
00039 void * ptrVar;
00040 public:
00041 dataXfer(string in, void * ptrIn):m_name(in),ptrVar(ptrIn){;}
00042 virtual ~dataXfer(){;}
00043 virtual void toClassVar( basicField & rFld ) = 0;
00044 virtual string toFieldVar( void ) = 0;
00045 const string & name( void ) const
00046 {
00047 return m_name;
00048 }
00049 void * getPtr(void) const
00050 {
00051 return ptrVar;
00052 }
00053 };
00054
00055 class shortXfer : public dataXfer
00056 {
00057
00058 public:
00059 shortXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00060 virtual ~shortXfer(){;}
00061 void toClassVar( basicField & rFld )
00062 {
00063 short & val = *static_cast<short*>(ptrVar);
00064 shortField & rlF = dynamic_cast<shortField&>(rFld);
00065 val = rlF.get();
00066 }
00067 string toFieldVar( void )
00068 {
00069 ocString ret;
00070 short & val = *static_cast<short*>(ptrVar);
00071 ret.append(val);
00072 return ret;
00073 }
00074 };
00075 class intXfer : public dataXfer
00076 {
00077
00078 public:
00079 intXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00080 virtual ~intXfer(){;}
00081 void toClassVar( basicField & rFld )
00082 {
00083 int & val = *static_cast<int*>(ptrVar);
00084 longField & rlF = dynamic_cast<longField&>(rFld);
00085 val = rlF.get();
00086 }
00087 string toFieldVar( void )
00088 {
00089 ocString ret;
00090 int & val = *static_cast<int*>(ptrVar);
00091 ret.append(val);
00092 return ret;
00093 }
00094 };
00095
00096 class longXfer : public dataXfer
00097 {
00098
00099 public:
00100 longXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00101 virtual ~longXfer(){;}
00102 void toClassVar( basicField & rFld )
00103 {
00104 long & val = *static_cast<long*>(ptrVar);
00105 longField & rlF = dynamic_cast<longField&>(rFld);
00106 val = rlF.get();
00107 }
00108 string toFieldVar( void )
00109 {
00110 ocString ret;
00111 long & val = *static_cast<long*>(ptrVar);
00112 ret.append(val);
00113 return ret;
00114 }
00115 };
00116
00117 class llongXfer : public dataXfer
00118 {
00119
00120 public:
00121 llongXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00122 virtual ~llongXfer(){;}
00123 void toClassVar( basicField & rFld )
00124 {
00125 llong & val = *static_cast<llong*>(ptrVar);
00126 longlongField & rllF = dynamic_cast<longlongField&>(rFld);
00127 val = rllF.get();
00128 }
00129 string toFieldVar( void )
00130 {
00131 ocString ret;
00132 llong & val = *static_cast<llong*>(ptrVar);
00133 ret.append(val);
00134 return ret;
00135 }
00136 };
00137
00138 class boolXfer : public dataXfer
00139 {
00140 public:
00141 boolXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00142 virtual ~boolXfer(){;}
00143 void toClassVar( basicField & rFld )
00144 {
00145 bool & val = *static_cast<bool*>(ptrVar);
00146 switch( rFld.getType() )
00147 {
00148 case shortType:
00149 case longType:
00150 case longlongType:
00151 val = atol( rFld.format().c_str() ) != 0L;
00152 break;
00153 case stringType:
00154 {
00155 char chVal = rFld.format()[0];
00156 val = ::toupper(chVal) == 'T' ||
00157 ::toupper(chVal) == 'Y' ||
00158 chVal == '1';
00159 }
00160 break;
00161
00162 case boolType:
00163 val = dynamic_cast<boolField &>(rFld).get();
00164 break;
00165 default:
00166 val=false;
00167 break;
00168 }
00169 }
00170 string toFieldVar( void )
00171 {
00172 ocString ret("'");
00173 bool & val = *static_cast<bool*>(ptrVar);
00174 ret.append(val?1:0);
00175 ret += "'";
00176 return ret;
00177 }
00178 };
00179
00180 class moneyXfer : public dataXfer
00181 {
00182 public:
00183 string fmt;
00184 moneyXfer(string in, void * ptrIn):dataXfer(in,ptrIn),fmt("%.2f"){;}
00185 virtual ~moneyXfer(){;}
00186 void toClassVar( basicField & rFld )
00187 {
00188 money & val = *static_cast<money*>(ptrVar);
00189
00190 switch( rFld.getType())
00191 {
00192 case doubleType:
00193 {
00194 doubleField & rdF = dynamic_cast<doubleField&>(rFld);
00195 val = rdF.get();
00196 }
00197 break;
00198 case currencyType:
00199 {
00200 currencyField & rcF = dynamic_cast<currencyField&>(rFld);
00201 val = rcF.get().amount;
00202 }
00203 break;
00204 default:
00205 break;
00206 }
00207 }
00208 string toFieldVar( void )
00209 {
00210 string ret;
00211 char buf[255];
00212 money & val = *static_cast<money*>(ptrVar);
00213 if( snprintf(buf, sizeof(buf), fmt.c_str(), val.amount()) > 0 )
00214 {
00215 ret = buf;
00216 }
00217 return ret;
00218 }
00219 };
00220
00221 class stringXfer : public dataXfer
00222 {
00223 public:
00224 stringXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00225 virtual ~stringXfer(){;}
00226 void toClassVar( basicField & rFld )
00227 {
00228 string & val = *static_cast<string*>(ptrVar);
00229 stringField & rstringF = dynamic_cast<stringField&>(rFld);
00230 val = rstringF.get();
00231 }
00232 string toFieldVar( void )
00233 {
00234 string ret = "'";
00235 string & val = *static_cast<string*>(ptrVar);
00236 ocString fixup = val;
00237 ret += fixup.replaceAll("'","''");
00238 ret += "'";
00239 return ret;
00240 }
00241 };
00242
00243 class doubleXfer : public dataXfer
00244 {
00245 public:
00246 doubleXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00247 virtual ~doubleXfer(){;}
00248 void toClassVar( basicField & rFld )
00249 {
00250 double & val = *static_cast<double*>(ptrVar);
00251 switch( rFld.getType())
00252 {
00253 case doubleType:
00254 {
00255 doubleField & rdF = dynamic_cast<doubleField&>(rFld);
00256 val = rdF.get();
00257 }
00258 break;
00259 case floatType:
00260 {
00261 floatField & rcF = dynamic_cast<floatField&>(rFld);
00262 val = rcF.get();
00263 }
00264 break;
00265 default:
00266 break;
00267 }
00268 }
00269 string toFieldVar( void )
00270 {
00271 ocString ret;
00272 double & val = *static_cast<double*>(ptrVar);
00273 ret.append(val);
00274 return ret;
00275 }
00276 };
00277 class time_dateXfer : public dataXfer
00278 {
00279 public:
00280 time_dateXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00281 virtual ~time_dateXfer(){;}
00282 void toClassVar( basicField & rFld )
00283 {
00284 time_date & val = *static_cast<time_date*>(ptrVar);
00285 dateTimeField & rdtF = dynamic_cast<dateTimeField&>(rFld);
00286 val = rdtF.get();
00287 }
00288 string toFieldVar( void )
00289 {
00290 string ret = "'";
00291 time_date & val = *static_cast<time_date*>(ptrVar);
00292 ret += val.format(iDateTimeMyFMT);
00293 ret += "'";
00294 return ret;
00295 }
00296 };
00297 class timeXfer : public dataXfer
00298 {
00299 public:
00300 timeXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00301 virtual ~timeXfer(){;}
00302 void toClassVar( basicField & rFld )
00303 {
00304 oc_time & val = *static_cast<oc_time*>(ptrVar);
00305 dateTimeField & rdtF = dynamic_cast<dateTimeField&>(rFld);
00306 val = rdtF.get();
00307 }
00308 string toFieldVar( void )
00309 {
00310 string ret = "'";
00311 oc_time & val = *static_cast<oc_time*>(ptrVar);
00312 ret += val.time_date::format(iTimeMyFMT);
00313 ret += "'";
00314 return ret;
00315 }
00316 };
00317 class oc_dateXfer : public dataXfer
00318 {
00319 public:
00320 oc_dateXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00321 virtual ~oc_dateXfer(){;}
00322 void toClassVar( basicField & rFld )
00323 {
00324 oc_date & val = *static_cast<oc_date*>(ptrVar);
00325 dateTimeField & rdtF = dynamic_cast<dateTimeField&>(rFld);
00326 val = rdtF.get();
00327 }
00328 string toFieldVar( void )
00329 {
00330 string ret = "'";
00331 oc_date & val = *static_cast<oc_date*>(ptrVar);
00332 ret += val.time_date::format(iDateMyFMT);
00333 ret += "'";
00334 return ret;
00335 }
00336 };
00337 typedef vector<dataXfer*> dataXfers;
00338