00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 typedef long long identifier;
00019
00020
00021 typedef long long llong;
00022
00023
00024
00025
00026 class dataXfer
00027 {
00028 protected:
00029 string m_name;
00030 void * ptrVar;
00031 public:
00032 dataXfer(string in, void * ptrIn):m_name(in),ptrVar(ptrIn){;}
00033 virtual ~dataXfer(){;}
00034 virtual void toClassVar( basicField & rFld ) = 0;
00035 virtual string toFieldVar( void ) = 0;
00036 const string & name( void ) const
00037 {
00038 return m_name;
00039 }
00040 void * getPtr(void) const
00041 {
00042 return ptrVar;
00043 }
00044 };
00045
00046 class longXfer : public dataXfer
00047 {
00048
00049 public:
00050 longXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00051 virtual ~longXfer(){;}
00052 void toClassVar( basicField & rFld )
00053 {
00054 long & val = *static_cast<long*>(ptrVar);
00055 longField & rlF = dynamic_cast<longField&>(rFld);
00056 val = rlF.get();
00057 }
00058 string toFieldVar( void )
00059 {
00060 ocString ret;
00061 long & val = *static_cast<long*>(ptrVar);
00062 ret.append(val);
00063 return ret;
00064 }
00065 };
00066
00067 class llongXfer : public dataXfer
00068 {
00069
00070 public:
00071 llongXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00072 virtual ~llongXfer(){;}
00073 void toClassVar( basicField & rFld )
00074 {
00075 llong & val = *static_cast<llong*>(ptrVar);
00076 longlongField & rllF = dynamic_cast<longlongField&>(rFld);
00077 val = rllF.get();
00078 }
00079 string toFieldVar( void )
00080 {
00081 ocString ret;
00082 llong & val = *static_cast<llong*>(ptrVar);
00083 ret.append(val);
00084 return ret;
00085 }
00086 };
00087
00088 class boolXfer : public dataXfer
00089 {
00090 public:
00091 boolXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00092 virtual ~boolXfer(){;}
00093 void toClassVar( basicField & rFld )
00094 {
00095 bool & val = *static_cast<bool*>(ptrVar);
00096 switch( rFld.getType() )
00097 {
00098 case shortType:
00099 case longType:
00100 case longlongType:
00101 val = atol( rFld.format().c_str() ) != 0L;
00102 break;
00103 case stringType:
00104 {
00105 char chVal = rFld.format()[0];
00106 val = ::toupper(chVal) == 'T' ||
00107 ::toupper(chVal) == 'Y' ||
00108 chVal == '1';
00109 }
00110 break;
00111
00112 case boolType:
00113 val = dynamic_cast<boolField &>(rFld).get();
00114 break;
00115 default:
00116 val=false;
00117 break;
00118 }
00119 }
00120 string toFieldVar( void )
00121 {
00122 ocString ret("'");
00123 bool & val = *static_cast<bool*>(ptrVar);
00124 ret.append(val?1:0);
00125 ret += "'";
00126 return ret;
00127 }
00128 };
00129
00130 class moneyXfer : public dataXfer
00131 {
00132 public:
00133 moneyXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00134 virtual ~moneyXfer(){;}
00135 void toClassVar( basicField & rFld )
00136 {
00137 money & val = *static_cast<money*>(ptrVar);
00138
00139 switch( rFld.getType())
00140 {
00141 case doubleType:
00142 {
00143 doubleField & rdF = dynamic_cast<doubleField&>(rFld);
00144 val = rdF.get();
00145 }
00146 break;
00147 case currencyType:
00148 {
00149 currencyField & rcF = dynamic_cast<currencyField&>(rFld);
00150 val = rcF.get().amount;
00151 }
00152 break;
00153 default:
00154 break;
00155 }
00156 }
00157 string toFieldVar( void )
00158 {
00159 ocString ret;
00160 money & val = *static_cast<money*>(ptrVar);
00161 ret.append(val.whole());
00162 ret+=".";
00163 ret.append(val.fractional());
00164 return ret;
00165 }
00166 };
00167
00168 class stringXfer : public dataXfer
00169 {
00170 public:
00171 stringXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00172 virtual ~stringXfer(){;}
00173 void toClassVar( basicField & rFld )
00174 {
00175 string & val = *static_cast<string*>(ptrVar);
00176 stringField & rstringF = dynamic_cast<stringField&>(rFld);
00177 val = rstringF.get();
00178 }
00179 string toFieldVar( void )
00180 {
00181 string ret = "'";
00182 string & val = *static_cast<string*>(ptrVar);
00183 ocString fixup = val;
00184 ret += fixup.replaceAll("'","''");
00185 ret += "'";
00186 return ret;
00187 }
00188 };
00189
00190 class doubleXfer : public dataXfer
00191 {
00192 public:
00193 doubleXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00194 virtual ~doubleXfer(){;}
00195 void toClassVar( basicField & rFld )
00196 {
00197 double & val = *static_cast<double*>(ptrVar);
00198 switch( rFld.getType())
00199 {
00200 case doubleType:
00201 {
00202 doubleField & rdF = dynamic_cast<doubleField&>(rFld);
00203 val = rdF.get();
00204 }
00205 break;
00206 case floatType:
00207 {
00208 floatField & rcF = dynamic_cast<floatField&>(rFld);
00209 val = rcF.get();
00210 }
00211 break;
00212 default:
00213 break;
00214 }
00215 }
00216 string toFieldVar( void )
00217 {
00218 ocString ret;
00219 double & val = *static_cast<double*>(ptrVar);
00220 ret.append(val);
00221 return ret;
00222 }
00223 };
00224 class time_dateXfer : public dataXfer
00225 {
00226 public:
00227 time_dateXfer(string in, void * ptrIn):dataXfer(in,ptrIn){;}
00228 virtual ~time_dateXfer(){;}
00229 void toClassVar( basicField & rFld )
00230 {
00231 time_date & val = *static_cast<time_date*>(ptrVar);
00232 dateTimeField & rdtF = dynamic_cast<dateTimeField&>(rFld);
00233 val = rdtF.get();
00234 }
00235 string toFieldVar( void )
00236 {
00237 string ret = "'";
00238 time_date & val = *static_cast<time_date*>(ptrVar);
00239 ret += val.format(iDateTimeMyFMT);
00240 ret += "'";
00241 return ret;
00242 }
00243 };
00244 typedef vector<dataXfer*> dataXfers;
00245