📄 class_8h-source.html
字号:
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> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 1;
01116 <span class="keywordflow">return</span> fd;
01117 }
01118 <span class="preprocessor">#endif</span>
01119 <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>*&)
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 <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>*&)
01131 {
01132 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpString;
01133 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying);
01134 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;
01135 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>);
01136 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;
01137 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;
01138 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 1;
01139 <span class="keywordflow">return</span> fd;
01140 }
01141
01142
<a name="l01146"></a><a class="code" href="classdbAnyMethodTrampoline.html">01146</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbAnyMethodTrampoline {
01147 <span class="keyword">public</span>:
01148 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* cls;
01149
01155 <span class="keyword">virtual</span> <span class="keywordtype">void</span> invoke(byte* data, <span class="keywordtype">void</span>* result) = 0;
01156
01163 <span class="keyword">virtual</span> dbAnyMethodTrampoline* optimize() = 0;
01164
<a name="l01169"></a><a class="code" href="classdbAnyMethodTrampoline.html#dbAnyMethodTrampolinea2">01169</a> dbAnyMethodTrampoline(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) { cls = fd; }
01170
01171 <span class="keywordtype">void</span>* operator new(size_t size EXTRA_DEBUG_NEW_PARAMS);
01172 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p EXTRA_DEBUG_NEW_PARAMS);
01173
01177 <span class="keyword">virtual</span>~dbAnyMethodTrampoline();
01178 };
01179
01180
01181 <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>
01182 <span class="preprocessor"></span>
01185 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>
01186 <span class="keyword">class </span><a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a> : <span class="keyword">public</span> dbAnyMethodTrampoline {
01187 <span class="keyword">public</span>:
01188 <span class="keyword">typedef</span> R (T::*mfunc)();
01189
01190 mfunc method;
01191 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* cls;
01192 <span class="keywordtype">bool</span> optimized;
01193
01194 <span class="keywordtype">void</span> <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea0">invoke</a>(byte* data, <span class="keywordtype">void</span>* result) {
01195 <span class="keywordflow">if</span> (optimized) {
01196 *(R*)result = (((T*)(data + this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm17">dbsOffs</a>))->*method)();
01197 } <span class="keywordflow">else</span> {
01198 T rec;
01199 this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora7">fetchRecordFields</a>((byte*)&rec, data);
01200 *(R*)result = (rec.*method)();
01201 }
01202 }
01203 dbAnyMethodTrampoline* <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">optimize</a>() {
01204 optimized = <span class="keyword">true</span>;
01205 <span class="keywordflow">return</span> <span class="keyword">this</span>;
01206 }
01207
01208 <a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a>(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, mfunc f)
01209 : dbAnyMethodTrampoline(fd)
01210 {
01211 this->method = f;
01212 this->cls = fd;
01213 this->optimized = <span class="keyword">false</span>;
01214 }
01215 };
01216
01217 <span class="preprocessor">#else</span>
01218 <span class="preprocessor"></span>
01222 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>
<a name="l01223"></a><a class="code" href="classdbMethodTrampoline.html">01223</a> <span class="keyword">class </span><a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a> : <span class="keyword">public</span> dbAnyMethodTrampoline {
01224 <span class="keyword">public</span>:
01225 <span class="keyword">typedef</span> R (T::*mfunc)();
01226 mfunc method;
<a name="l01227"></a><a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea0">01227</a> <span class="keywordtype">void</span> <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea0">invoke</a>(byte* data, <span class="keywordtype">void</span>* result) {
01228 T rec;
01229 this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora7">fetchRecordFields</a>((byte*)&rec, data);
01230 *(R*)result = (rec.*method)();
01231 }
01232 dbAnyMethodTrampoline* <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">optimize</a>();
01233
01234 <a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline</a>(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, mfunc f)
01235 : dbAnyMethodTrampoline(fd), method(f) {}
01236 };
01237
01238
01243 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>
<a name="l01244"></a><a class="code" href="classdbMethodFastTrampoline.html">01244</a> <span class="keyword">class </span><a class="code" href="classdbMethodFastTrampoline.html">dbMethodFastTrampoline</a> : <span class="keyword">public</span> dbAnyMethodTrampoline {
01245 <span class="keyword">typedef</span> R (T::*mfunc)();
01246 mfunc method;
01247 <span class="keyword">public</span>:
<a name="l01248"></a><a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea0">01248</a> dbAnyMethodTrampoline* <a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea0">optimize</a>() {
01249 <span class="keywordflow">return</span> <span class="keyword">this</span>;
01250 }
<a name="l01251"></a><a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea1">01251</a> <span class="keywordtype">void</span> <a class="code" href="classdbMethodFastTrampoline.html#dbMethodFastTrampolinea1">invoke</a>(byte* data, <span class="keywordtype">void</span>* result) {
01252 *(R*)result = (((T*)(data + this->cls-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm17">dbsOffs</a>))->*method)();
01253 }
01254 <a class="code" href="classdbMethodFastTrampoline.html">dbMethodFastTrampoline</a>(<a class="code" href="classdbMethodTrampoline.html">dbMethodTrampoline<T,R></a>* mt)
01255 : dbAnyMethodTrampoline(mt->cls), method(mt->method) {
01256 <span class="keyword">delete</span> mt;
01257 }
01258 };
01259
01260 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>
<a name="l01261"></a><a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">01261</a> <span class="keyword">inline</span> dbAnyMethodTrampoline* <a class="code" href="classdbMethodTrampoline.html#dbMethodTrampolinea1">dbMethodTrampoline<T,R>::optimize</a>() {
01262 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classdbMethodFastTrampoline.html">dbMethodFastTrampoline<T,R></a>(this);
01263 }
01264
01265 <span class="preprocessor">#endif</span>
01266 <span class="preprocessor"></span>
01267 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> R>
01268 <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)())
01269 {
01270 R ret;
01271 dbDescribeField(fd, ret);
01272 assert(fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> <= dbField::tpReference);
01273 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> += dbField::tpMethodBool;
01274 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);
01275 <span class="keywordflow">return</span> fd;
01276 }
01277
01278 END_FASTDB_NAMESPACE
01279
01280 <span class="preprocessor">#endif</span>
01281 <span class="preprocessor"></span>
01282
</pre></div><hr><address style="align: right;"><small>Generated on Thu Feb 14 12:42:30 2008 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 + -