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 && (bitmap[oid >> 5] & (1 << (oid & 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 >> 5] |= 1 << (oid & 31);00308 }00309 } 00310 00311 <font class="keywordtype">bool</font> add(oid_t oid) { 00312 <font class="keywordflow">if</font> (selection.nRows < limit) { 00313 <font class="keywordflow">if</font> (eliminateDuplicates) { 00314 <font class="keywordflow">if</font> (bitmap[oid >> 5] & (1 << (oid & 31))) { 00315 <font class="keywordflow">return</font> <font class="keyword">true</font>;00316 }00317 bitmap[oid >> 5] |= 1 << (oid & 31);00318 } 00319 selection.add(oid);00320 <font class="keywordflow">return</font> selection.nRows < 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>& ref);00331 00332 <font class="keywordtype">void</font> fetch() { 00333 assert(!(db-><a class="code" href="classdbDatabase.html#dbSubSqln4">currIndex</a>[currId] 00334 & (dbInternalObjectMarker|dbFreeHandleMarker)));00335 table-><a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn4">columns</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora7">fetchRecordFields</a>(record, 00336 (byte*)db-><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-><a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn4">columns</a>-><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-><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>& aTable, dbCursorType aType, byte* rec)00355 : table(&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><<font class="keyword">class</font> T><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*)&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*)&record)00411 {00412 db = aDb;00413 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* theTable = db-><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 : &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> &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> &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> &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> &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 -></a>() { 00480 assert(currId != 0);00481 <font class="keywordflow">return</font> &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<T></a> <font class="keyword">const</font>& ref) { 00490 setCurrent(ref);00491 <font class="keywordflow">return</font> &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>< <a class="code" href="classdbReference.html">dbReference<T></a> >& 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<T></a> <a class="code" href="classdbCursor.html#dbCursora10">currentId</a>() { 00508 <font class="keywordflow">return</font> <a class="code" href="classdbReference.html">dbReference<T></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->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 + -
显示快捷键?