📄 class_8h-source.html
字号:
01105 <span class="keywordflow">return</span> fd;01106 }01107 <span class="preprocessor">#endif</span>01108 <span class="preprocessor"></span><span class="keyword">inline</span> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* dbDescribeField(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, <span class="keywordtype">char</span> <span class="keyword">const</span>*&) 01109 { 01110 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpString; 01111 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying); 01112 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;01113 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a> = <span class="keyword">new</span> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>(<span class="stringliteral">"[]"</span>);01114 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpInt1;01115 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm23">appSize</a> = 1;01116 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 1; 01117 <span class="keywordflow">return</span> fd;01118 }01119 <span class="keyword">inline</span> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* dbDescribeField(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, <span class="keywordtype">char</span>*&) 01120 { 01121 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpString; 01122 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying); 01123 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;01124 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a> = <span class="keyword">new</span> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>(<span class="stringliteral">"[]"</span>);01125 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpInt1;01126 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm23">appSize</a> = 1;01127 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 1; 01128 <span class="keywordflow">return</span> fd;01129 }01130 01131 <a name="l01135"></a><a class="code" href="classdbAnyMethodTrampoline.html">01135</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbAnyMethodTrampoline { 01136 <span class="keyword">public</span>:01137 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* cls;01138 01144 <span class="keyword">virtual</span> <span class="keywordtype">void</span> invoke(byte* data, <span class="keywordtype">void</span>* result) = 0;01145 01152 <span class="keyword">virtual</span> dbAnyMethodTrampoline* optimize() = 0;01153 <a name="l01158"></a><a class="code" href="classdbAnyMethodTrampoline.html#dbAnyMethodTrampolinea2">01158</a> dbAnyMethodTrampoline(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) { cls = fd; }01159 01160 <span class="keywordtype">void</span>* operator new(size_t size EXTRA_DEBUG_NEW_PARAMS);01161 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p EXTRA_DEBUG_NEW_PARAMS);01162 01166 <span class="keyword">virtual</span>~dbAnyMethodTrampoline();01167 };01168 01169 01170 <span class="preprocessor">#if defined(__APPLE__) || defined(__VACPP_MULTI__) || defined(__IBMCPP__) || defined(__HP_aCC) || (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x510 && __SUNPRO_CC_COMPAT == 5)</span>01171 <span class="preprocessor"></span>01174 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>01175 <span class="keyword">class </span><a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a> : <span class="keyword">public</span> dbAnyMethodTrampoline {01176 <span class="keyword">public</span>:01177 <span class="keyword">typedef</span> R (T::*mfunc)();01178 01179 mfunc method;01180 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* cls;01181 <span class="keywordtype">bool</span> optimized;01182 01183 <span class="keywordtype">void</span> <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea0">invoke</a>(byte* data, <span class="keywordtype">void</span>* result) {01184 <span class="keywordflow">if</span> (optimized) { 01185 *(R*)result = (((T*)(data + this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm17">dbsOffs</a>))->*method)();01186 } <span class="keywordflow">else</span> { 01187 T rec;01188 this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora7">fetchRecordFields</a>((byte*)&rec, data);01189 *(R*)result = (rec.*method)();01190 }01191 }01192 dbAnyMethodTrampoline* <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">optimize</a>() { 01193 optimized = <span class="keyword">true</span>;01194 <span class="keywordflow">return</span> <span class="keyword">this</span>;01195 }01196 01197 <a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a>(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, mfunc f)01198 : dbAnyMethodTrampoline(fd)01199 {01200 this->method = f;01201 this->cls = fd;01202 this->optimized = <span class="keyword">false</span>;01203 }01204 };01205 01206 <span class="preprocessor">#else</span>01207 <span class="preprocessor"></span>01211 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R><a name="l01212"></a><a class="code" href="classdbMethodTrampoline.html">01212</a> <span class="keyword">class </span><a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a> : <span class="keyword">public</span> dbAnyMethodTrampoline { 01213 <span class="keyword">public</span>:01214 <span class="keyword">typedef</span> R (T::*mfunc)();01215 mfunc method;<a name="l01216"></a><a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea0">01216</a> <span class="keywordtype">void</span> <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea0">invoke</a>(byte* data, <span class="keywordtype">void</span>* result) {01217 T rec;01218 this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora7">fetchRecordFields</a>((byte*)&rec, data);01219 *(R*)result = (rec.*method)();01220 }01221 dbAnyMethodTrampoline* <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">optimize</a>();01222 01223 <a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a>(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, mfunc f) 01224 : dbAnyMethodTrampoline(fd), method(f) {} 01225 };01226 01227 01232 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R><a name="l01233"></a><a class="code" href="classdbMethodFastTrampoline.html">01233</a> <span class="keyword">class </span><a class="code" href="classdbMethodFastTrampoline.html">dbMethodFastTrampoline</a> : <span class="keyword">public</span> dbAnyMethodTrampoline { 01234 <span class="keyword">typedef</span> R (T::*mfunc)();01235 mfunc method;01236 <span class="keyword">public</span>:<a name="l01237"></a><a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea0">01237</a> dbAnyMethodTrampoline* <a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea0">optimize</a>() { 01238 <span class="keywordflow">return</span> <span class="keyword">this</span>;01239 }<a name="l01240"></a><a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea1">01240</a> <span class="keywordtype">void</span> <a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea1">invoke</a>(byte* data, <span class="keywordtype">void</span>* result) {01241 *(R*)result = (((T*)(data + this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm17">dbsOffs</a>))->*method)();01242 }01243 <a class="code" href="classdbMethodFastTrampoline.html">dbMethodFastTrampoline</a>(<a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline<T,R></a>* mt) 01244 : dbAnyMethodTrampoline(mt->cls), method(mt->method) {01245 <span class="keyword">delete</span> mt;01246 }01247 };01248 01249 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R><a name="l01250"></a><a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">01250</a> <span class="keyword">inline</span> dbAnyMethodTrampoline* <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">dbMethodTrampoline<T,R>::optimize</a>() { 01251 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classdbMethodFastTrampoline.html">dbMethodFastTrampoline<T,R></a>(this);01252 }01253 01254 <span class="preprocessor">#endif</span>01255 <span class="preprocessor"></span>01256 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>01257 <span class="keyword">inline</span> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* dbDescribeMethod(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, R (T::*p)()) 01258 { 01259 R ret;01260 dbDescribeField(fd, ret);01261 assert(fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> <= dbField::tpReference);01262 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> += dbField::tpMethodBool;01263 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm30">method</a> = <span class="keyword">new</span> <a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline<T,R></a>(fd, p);01264 <span class="keywordflow">return</span> fd;01265 }01266 01267 END_FASTDB_NAMESPACE01268 01269 <span class="preprocessor">#endif</span>01270 <span class="preprocessor"></span>01271 </pre></div><hr><address style="align: right;"><small>Generated on Mon Oct 23 13:23:57 2006 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -