⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursor_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00361     dbSelection        selection;00362     <span class="keywordtype">bool</span>               allRecords;00363     oid_t              firstId;00364     oid_t              lastId;00365     oid_t              currId;00366     byte*              record;00367     size_t             limit;00368 00369     int4*              bitmap; <span class="comment">// bitmap to avoid duplicates</span>00370     size_t             bitmapSize;00371     <span class="keywordtype">bool</span>               eliminateDuplicates;00372     <span class="keywordtype">bool</span>               prefetch;00373     <span class="keywordtype">bool</span>               removed; <span class="comment">// current record was removed</span>00374     <span class="keywordtype">bool</span>               updateInProgress;00375 00376     <span class="keywordtype">void</span>*              paramBase;00377     00378     <span class="keywordtype">void</span> checkForDuplicates();00379 00380     <span class="keywordtype">bool</span> isMarked(oid_t oid) { 00381         <span class="keywordflow">return</span> bitmap != NULL &amp;&amp; (bitmap[oid &gt;&gt; 5] &amp; (1 &lt;&lt; (oid &amp; 31))) != 0;00382     }00383 00384     <span class="keywordtype">void</span> mark(oid_t oid) { 00385         <span class="keywordflow">if</span> (bitmap != NULL) { 00386             bitmap[oid &gt;&gt; 5] |= 1 &lt;&lt; (oid &amp; 31);00387         }00388     }    00389 00390     <span class="keywordtype">bool</span> add(oid_t oid) { 00391         <span class="keywordflow">if</span> (selection.nRows &lt; limit) { 00392             <span class="keywordflow">if</span> (eliminateDuplicates) { 00393                 <span class="keywordflow">if</span> (bitmap[oid &gt;&gt; 5] &amp; (1 &lt;&lt; (oid &amp; 31))) { 00394                     <span class="keywordflow">return</span> <span class="keyword">true</span>;00395                 }00396                 bitmap[oid &gt;&gt; 5] |= 1 &lt;&lt; (oid &amp; 31);00397             } 00398             selection.add(oid);00399             <span class="keywordflow">return</span> selection.nRows &lt; limit;00400         } 00401         <span class="keywordflow">return</span> <span class="keyword">false</span>;00402     }00403 00404     <span class="keywordtype">bool</span> gotoNext();00405     <span class="keywordtype">bool</span> gotoPrev(); 00406     <span class="keywordtype">bool</span> gotoFirst();00407     <span class="keywordtype">bool</span> gotoLast();00408     00409     <span class="keywordtype">void</span> setCurrent(<a class="code" href="classdbAnyReference.html">dbAnyReference</a> <span class="keyword">const</span>&amp; ref);00410 00411     <span class="keywordtype">void</span> adjustReferences(size_t base, size_t size, <span class="keywordtype">long</span> shift) { 00412         <span class="keywordflow">if</span> (currId != 0) { 00413             table-&gt;columns-&gt;adjustReferences(record, base, size, shift);00414         }00415     }00416 00417     dbAnyCursor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>&amp; aTable, dbCursorType aType, byte* rec)00418     : table(&amp;aTable),type(aType),defaultType(aType),00419       allRecords(false),currId(0),record(rec)00420     {00421         db = aTable.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp10">db</a>;00422         limit = dbDefaultSelectionLimit;00423         updateInProgress = <span class="keyword">false</span>;00424         prefetch = <span class="keyword">true</span>;00425         removed = <span class="keyword">false</span>;00426         bitmap = NULL; 00427         bitmapSize = 0;00428         eliminateDuplicates = <span class="keyword">false</span>;00429         paramBase = NULL;00430     }00431   <span class="keyword">public</span>:00432     dbAnyCursor() 00433     : table(NULL),type(dbCursorViewOnly),defaultType(dbCursorViewOnly),00434           allRecords(false),currId(0),record(NULL)00435     {00436         limit = dbDefaultSelectionLimit;00437         updateInProgress = <span class="keyword">false</span>;00438         prefetch = <span class="keyword">false</span>;00439         removed = <span class="keyword">false</span>;00440         bitmap = NULL;00441         bitmapSize = 0;00442         eliminateDuplicates = <span class="keyword">false</span>;00443         db = NULL;00444         paramBase = NULL;00445     }00446     ~dbAnyCursor();00447 };00448 00449 00453 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00454"></a><a class="code" href="classdbCursor.html">00454</a> <span class="keyword">class </span><a class="code" href="classdbCursor.html">dbCursor</a> : <span class="keyword">public</span> dbAnyCursor { 00455   <span class="keyword">protected</span>:00456     T record;00457     00458   <span class="keyword">public</span>:<a name="l00463"></a><a class="code" href="classdbCursor.html#dbCursora0">00463</a>     <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(dbCursorType type = dbCursorViewOnly) 00464         : dbAnyCursor(T::dbDescriptor, type, (byte*)&amp;record) {}00465 <a name="l00472"></a><a class="code" href="classdbCursor.html#dbCursora1">00472</a>     <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, dbCursorType type = dbCursorViewOnly)00473         : dbAnyCursor(T::dbDescriptor, type, (byte*)&amp;record)00474     {00475         db = aDb;00476         <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* theTable = db-&gt;<a class="code" href="classdbDatabase.html#dbSubSqla32">lookupTable</a>(table);00477         <span class="keywordflow">if</span> (theTable != NULL) { 00478             table = theTable;00479         }00480     }00481 <a name="l00486"></a><a class="code" href="classdbCursor.html#dbCursora2">00486</a>     T* <a class="code" href="classdbCursor.html#dbCursora2">get</a>() { 00487         <span class="keywordflow">return</span> currId == 0 ? (T*)NULL : &amp;record; 00488     }00489     <a name="l00494"></a><a class="code" href="classdbCursor.html#dbCursora3">00494</a>     T* <a class="code" href="classdbCursor.html#dbCursora3">next</a>() { 00495         <span class="keywordflow">if</span> (gotoNext()) { 00496             <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00497             <span class="keywordflow">return</span> &amp;record;00498         }00499         <span class="keywordflow">return</span> NULL;00500     }00501 <a name="l00506"></a><a class="code" href="classdbCursor.html#dbCursora4">00506</a>     T* <a class="code" href="classdbCursor.html#dbCursora4">prev</a>() { 00507         <span class="keywordflow">if</span> (gotoPrev()) { 00508             <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00509             <span class="keywordflow">return</span> &amp;record;00510         }00511         <span class="keywordflow">return</span> NULL;00512     }00513 <a name="l00518"></a><a class="code" href="classdbCursor.html#dbCursora5">00518</a>     T* <a class="code" href="classdbCursor.html#dbCursora5">first</a>() { 00519         <span class="keywordflow">if</span> (gotoFirst()) {00520             <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00521             <span class="keywordflow">return</span> &amp;record;00522         }00523         <span class="keywordflow">return</span> NULL;00524     }00525 <a name="l00530"></a><a class="code" href="classdbCursor.html#dbCursora6">00530</a>     T* <a class="code" href="classdbCursor.html#dbCursora6">last</a>() { 00531         <span class="keywordflow">if</span> (gotoLast()) {00532             <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00533             <span class="keywordflow">return</span> &amp;record;00534         }00535         <span class="keywordflow">return</span> NULL;00536     }    00537     <a name="l00543"></a><a class="code" href="classdbCursor.html#dbCursora7">00543</a>     <span class="keywordtype">int</span> <a class="code" href="classdbCursor.html#dbCursora7">seek</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <span class="keyword">const</span>&amp; ref) { 00544         <span class="keywordflow">return</span> <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a41">dbAnyCursor::seek</a>(ref.<a class="code" href="classdbAnyReference.html#dbReference_3_01Version_01_4a11">getOid</a>());00545     }00546 <a name="l00551"></a><a class="code" href="classdbCursor.html#dbCursora8">00551</a>     T* <a class="code" href="classdbCursor.html#dbCursora8">operator -&gt;</a>() { 00552         assert(currId != 0);00553         <span class="keywordflow">return</span> &amp;record;00554     }00555 <a name="l00561"></a><a class="code" href="classdbCursor.html#dbCursora9">00561</a>     T* <a class="code" href="classdbCursor.html#dbCursora9">at</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <span class="keyword">const</span>&amp; ref) { 00562         setCurrent(ref);00563         <span class="keywordflow">return</span> &amp;record;00564     }00565     <a name="l00570"></a><a class="code" href="classdbCursor.html#dbCursora10">00570</a>     <span class="keywordtype">void</span> <a class="code" href="classdbCursor.html#dbCursora10">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)<span class="keyword"> const </span>{ 00571         arr.resize(selection.nRows);00572         <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a20">toArrayOfOid</a>((oid_t*)arr.base());00573     }00574 <a name="l00579"></a><a class="code" href="classdbCursor.html#dbCursora11">00579</a>     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <a class="code" href="classdbCursor.html#dbCursora11">currentId</a>()<span class="keyword"> const </span>{ 00580         <span class="keywordflow">return</span> <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a>(currId);00581     }00582 <a name="l00599"></a><a class="code" href="classdbCursor.html#dbCursora12">00599</a>     T* <a class="code" href="classdbCursor.html#dbCursora12">nextAvailable</a>() { 00600         <span class="keywordflow">if</span> (!removed) { 00601             <span class="keywordflow">return</span> <a class="code" href="classdbCursor.html#dbCursora3">next</a>(); 00602         } <span class="keywordflow">else</span> { 00603             removed = <span class="keyword">false</span>;00604             <span class="keywordflow">return</span> <a class="code" href="classdbCursor.html#dbCursora2">get</a>();00605         }00606     }00607 <a name="l00612"></a><a class="code" href="classdbCursor.html#dbCursora13">00612</a>     <span class="keywordtype">bool</span> <a class="code" href="classdbCursor.html#dbCursora13">isInSelection</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a>&amp; ref)  <span class="keyword">const</span> {00613         <span class="keywordflow">return</span> <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a46">dbAnyCursor::isInSelection</a>(ref.getOid());00614     }00615 };00616 00617 <span class="keyword">class </span>dbParallelQueryContext { 00618   <span class="keyword">public</span>:00619     <a class="code" href="classdbDatabase.html">dbDatabase</a>* <span class="keyword">const</span>      db;00620     <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* <span class="keyword">const</span> query;00621     oid_t                  firstRow;00622     <a class="code" href="classdbTable.html">dbTable</a>*               table;00623     dbAnyCursor*           cursor;00624     dbSelection            selection[dbMaxParallelSearchThreads];00625 00626     <span class="keywordtype">void</span> search(<span class="keywordtype">int</span> i); 00627 00628     dbParallelQueryContext(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, <a class="code" href="classdbTable.html">dbTable</a>* aTable, 00629                            <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* aQuery, dbAnyCursor* aCursor)00630       : db(aDb), query(aQuery), firstRow(aTable-&gt;firstRow), table(aTable), cursor(aCursor) {}00631 };00632 00633 00634 <span class="keyword">extern</span> <span class="keywordtype">char</span>* strupper(<span class="keywordtype">char</span>* s);00635 00636 <span class="keyword">extern</span> <span class="keywordtype">char</span>* strlower(<span class="keywordtype">char</span>* s);00637 00638 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Feb 12 13:04:48 2004 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.5 </small></address></body></html>

⌨️ 快捷键说明

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