cursor_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 400 行 · 第 1/2 页

HTML
400
字号
00300 00301     <font class="keywordtype">bool</font> isMarked(oid_t oid) { 00302         <font class="keywordflow">return</font> bitmap != NULL &amp;&amp; (bitmap[oid &gt;&gt; 5] &amp; (1 &lt;&lt; (oid &amp; 31))) != 0;00303     }00304 00305     <font class="keywordtype">void</font> mark(oid_t oid) { 00306         <font class="keywordflow">if</font> (bitmap != NULL) { 00307             bitmap[oid &gt;&gt; 5] |= 1 &lt;&lt; (oid &amp; 31);00308         }00309     }    00310 00311     <font class="keywordtype">bool</font> add(oid_t oid) { 00312         <font class="keywordflow">if</font> (selection.nRows &lt; limit) { 00313             <font class="keywordflow">if</font> (eliminateDuplicates) { 00314                 <font class="keywordflow">if</font> (bitmap[oid &gt;&gt; 5] &amp; (1 &lt;&lt; (oid &amp; 31))) { 00315                     <font class="keywordflow">return</font> <font class="keyword">true</font>;00316                 }00317                 bitmap[oid &gt;&gt; 5] |= 1 &lt;&lt; (oid &amp; 31);00318             } 00319             selection.add(oid);00320             <font class="keywordflow">return</font> selection.nRows &lt; limit;00321         } 00322         <font class="keywordflow">return</font> <font class="keyword">false</font>;00323     }00324 00325     <font class="keywordtype">bool</font> gotoNext();00326     <font class="keywordtype">bool</font> gotoPrev(); 00327     <font class="keywordtype">bool</font> gotoFirst();00328     <font class="keywordtype">bool</font> gotoLast();00329     00330     <font class="keywordtype">void</font> setCurrent(<a class="code" href="classdbAnyReference.html">dbAnyReference</a> <font class="keyword">const</font>&amp; ref);00331 00332     <font class="keywordtype">void</font> fetch() { 00333         assert(!(db-&gt;<a class="code" href="classdbDatabase.html#dbSubSqln4">currIndex</a>[currId] 00334                  &amp; (dbInternalObjectMarker|dbFreeHandleMarker)));00335         table-&gt;<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn4">columns</a>-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora7">fetchRecordFields</a>(record, 00336                                           (byte*)db-&gt;<a class="code" href="classdbDatabase.html#dbSubSqlb4">getRow</a>(currId));00337     }00338 00339     <font class="keywordtype">void</font> adjustReferences(size_t base, size_t size, <font class="keywordtype">long</font> shift) { 00340         <font class="keywordflow">if</font> (currId != 0) { 00341             table-&gt;<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn4">columns</a>-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora8">adjustReferences</a>(record, base, size, shift);00342         }00343     }00344 00345     <font class="keywordtype">void</font> setTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* aTable) { 00346         table = aTable;00347         db = aTable-&gt;<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a>;00348     }00349 00350     <font class="keywordtype">void</font> setRecord(byte* rec) { 00351         record = rec;00352     }00353 00354     dbAnyCursor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>&amp; aTable, dbCursorType aType, byte* rec)00355     : table(&amp;aTable),type(aType),defaultType(aType),00356       allRecords(false),currId(0),record(rec)00357     {00358         db = aTable.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a>;00359         limit = dbDefaultSelectionLimit;00360         updateInProgress = <font class="keyword">false</font>;00361         prefetch = <font class="keyword">true</font>;00362         removed = <font class="keyword">false</font>;00363         bitmap = NULL; 00364         bitmapSize = 0;00365         eliminateDuplicates = <font class="keyword">false</font>;00366         paramBase = NULL;00367     }00368   <font class="keyword">public</font>:00369     dbAnyCursor() 00370     : table(NULL),type(dbCursorViewOnly),defaultType(dbCursorViewOnly),00371           allRecords(false),currId(0),record(NULL)00372     {00373         limit = dbDefaultSelectionLimit;00374         updateInProgress = <font class="keyword">false</font>;00375         prefetch = <font class="keyword">false</font>;00376         removed = <font class="keyword">false</font>;00377         bitmap = NULL;00378         bitmapSize = 0;00379         eliminateDuplicates = <font class="keyword">false</font>;00380         db = NULL;00381         paramBase = NULL;00382     }00383     ~dbAnyCursor();00384 };00385 00386 00390 <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;<a name="l00391"></a><a class="code" href="classdbCursor.html">00391</a> <font class="keyword">class </font><a class="code" href="classdbCursor.html">dbCursor</a> : <font class="keyword">public</font> dbAnyCursor { 00392   <font class="keyword">protected</font>:00393     T record;00394     00395   <font class="keyword">public</font>:<a name="l00400"></a><a class="code" href="classdbCursor.html#dbCursora0">00400</a>     <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(dbCursorType type = dbCursorViewOnly) 00401         : dbAnyCursor(T::dbDescriptor, type, (byte*)&amp;record) {}00402 <a name="l00409"></a><a class="code" href="classdbCursor.html#dbCursora1">00409</a>     <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, dbCursorType type = dbCursorViewOnly)00410         : dbAnyCursor(T::dbDescriptor, type, (byte*)&amp;record)00411     {00412         db = aDb;00413         <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* theTable = db-&gt;<a class="code" href="classdbDatabase.html#dbSubSqla23">lookupTable</a>(table);00414         <font class="keywordflow">if</font> (theTable != NULL) { 00415             table = theTable;00416         }00417     }00418 <a name="l00423"></a><a class="code" href="classdbCursor.html#dbCursora2">00423</a>     T* <a class="code" href="classdbCursor.html#dbCursora2">get</a>() { 00424         <font class="keywordflow">return</font> currId == 0 ? (T*)NULL : &amp;record; 00425     }00426     <a name="l00431"></a><a class="code" href="classdbCursor.html#dbCursora3">00431</a>     T* <a class="code" href="classdbCursor.html#dbCursora3">next</a>() { 00432         <font class="keywordflow">if</font> (gotoNext()) { 00433             fetch();00434             <font class="keywordflow">return</font> &amp;record;00435         }00436         <font class="keywordflow">return</font> NULL;00437     }00438 <a name="l00443"></a><a class="code" href="classdbCursor.html#dbCursora4">00443</a>     T* <a class="code" href="classdbCursor.html#dbCursora4">prev</a>() { 00444         <font class="keywordflow">if</font> (gotoPrev()) { 00445             fetch();00446             <font class="keywordflow">return</font> &amp;record;00447         }00448         <font class="keywordflow">return</font> NULL;00449     }00450 <a name="l00455"></a><a class="code" href="classdbCursor.html#dbCursora5">00455</a>     T* <a class="code" href="classdbCursor.html#dbCursora5">first</a>() { 00456         <font class="keywordflow">if</font> (gotoFirst()) {00457             fetch();00458             <font class="keywordflow">return</font> &amp;record;00459         }00460         <font class="keywordflow">return</font> NULL;00461     }00462 <a name="l00467"></a><a class="code" href="classdbCursor.html#dbCursora6">00467</a>     T* <a class="code" href="classdbCursor.html#dbCursora6">last</a>() { 00468         <font class="keywordflow">if</font> (gotoLast()) {00469             fetch();00470             <font class="keywordflow">return</font> &amp;record;00471         }00472         <font class="keywordflow">return</font> NULL;00473     }    00474     <a name="l00479"></a><a class="code" href="classdbCursor.html#dbCursora7">00479</a>     T* <a class="code" href="classdbCursor.html#dbCursora7">operator -&gt;</a>() { 00480         assert(currId != 0);00481         <font class="keywordflow">return</font> &amp;record;00482     }00483 <a name="l00489"></a><a class="code" href="classdbCursor.html#dbCursora8">00489</a>     T* <a class="code" href="classdbCursor.html#dbCursora8">at</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <font class="keyword">const</font>&amp; ref) { 00490         setCurrent(ref);00491         <font class="keywordflow">return</font> &amp;record;00492     }00493     <a name="l00498"></a><a class="code" href="classdbCursor.html#dbCursora9">00498</a>     <font class="keywordtype">void</font> <a class="code" href="classdbCursor.html#dbCursora9">toArray</a>(<a class="code" href="classdbArray.html">dbArray</a>&lt; <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> &gt;&amp; arr) { 00499         arr.resize(selection.nRows);00500         <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a16">toArrayOfOid</a>((oid_t*)arr.base());00501     }00502 <a name="l00507"></a><a class="code" href="classdbCursor.html#dbCursora10">00507</a>     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <a class="code" href="classdbCursor.html#dbCursora10">currentId</a>() { 00508         <font class="keywordflow">return</font> <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a>(currId);00509     }00510 <a name="l00527"></a><a class="code" href="classdbCursor.html#dbCursora11">00527</a>     T* <a class="code" href="classdbCursor.html#dbCursora11">nextAvailable</a>() { 00528         <font class="keywordflow">if</font> (!removed) { 00529             <font class="keywordflow">return</font> <a class="code" href="classdbCursor.html#dbCursora3">next</a>(); 00530         } <font class="keywordflow">else</font> { 00531             removed = <font class="keyword">false</font>;00532             <font class="keywordflow">return</font> <a class="code" href="classdbCursor.html#dbCursora2">get</a>();00533         }00534     }00535 };00536 00537 <font class="keyword">class </font>dbParallelQueryContext { 00538   <font class="keyword">public</font>:00539     <a class="code" href="classdbDatabase.html">dbDatabase</a>* <font class="keyword">const</font>      db;00540     <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* <font class="keyword">const</font> query;00541     oid_t                  firstRow;00542     <a class="code" href="classdbTable.html">dbTable</a>*               table;00543     dbAnyCursor*           cursor;00544     dbSelection            selection[dbMaxParallelSearchThreads];00545 00546     <font class="keywordtype">void</font> search(<font class="keywordtype">int</font> i); 00547 00548     dbParallelQueryContext(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, <a class="code" href="classdbTable.html">dbTable</a>* aTable, 00549                            <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* aQuery, dbAnyCursor* aCursor)00550       : db(aDb), query(aQuery), firstRow(aTable-&gt;firstRow), table(aTable), cursor(aCursor) {}00551 };00552 00553 00554 <font class="keyword">extern</font> <font class="keywordtype">char</font>* strupper(<font class="keywordtype">char</font>* s);00555 00556 <font class="keyword">extern</font> <font class="keywordtype">char</font>* strlower(<font class="keywordtype">char</font>* s);00557 00558 <font class="preprocessor">#endif</font></pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:28 2002 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.15 </small></address></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?