📄 timeseries_8h-source.html
字号:
00489 }00490 u[r] = data;00491 blocks.update();00492 <span class="keywordflow">return</span>;00493 }00494 blocks->elements.resize(n + minElementsInBlock < maxElementsInBlock ? n + minElementsInBlock : maxElementsInBlock);00495 }00496 T* u = blocks->elements.update();00497 <span class="keywordflow">for</span> (i = n; i > r; i--) { 00498 u[i] = u[i-1];00499 }00500 u[r] = data;00501 blocks->used += 1;00502 blocks.update();00503 }00504 00505 <a class="code" href="classdbDatabase.html">dbDatabase</a>& db;00506 <span class="keywordtype">int</span> maxElementsInBlock;00507 <span class="keywordtype">int</span> minElementsInBlock;00508 time_t maxBlockTimeInterval; 00509 <a class="code" href="classdbQuery.html">dbQuery</a> selectBlock;00510 <a class="code" href="classdbQuery.html">dbQuery</a> selectBlockReverse; 00511 };00512 00513 00517 <span class="keyword">template</span><<span class="keyword">class</span> T><a name="l00518"></a><a class="code" href="classdbTimeSeriesIterator.html">00518</a> <span class="keyword">class </span><a class="code" href="classdbTimeSeriesIterator.html">dbTimeSeriesIterator</a> { 00519 <span class="keyword">public</span>:<a name="l00527"></a><a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora0">00527</a> <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora0">start</a>(<a class="code" href="classdbTimeSeriesProcessor.html">dbTimeSeriesProcessor<T></a>* processor, oid_t oid, time_t from, time_t till) { 00528 first = pos = -1;00529 this->till = till;00530 <span class="keywordflow">if</span> (processor-><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora14">_openIteratorCursor</a>(blocks, oid, from, till)) { 00531 <span class="keywordflow">do</span> { 00532 <span class="keywordtype">int</span> n = blocks->used;00533 T <span class="keyword">const</span>* e = blocks->elements.get();00534 <span class="keywordtype">int</span> l = 0, r = n;00535 <span class="keywordflow">while</span> (l < r) {00536 <span class="keywordtype">int</span> i = (l+r) >> 1;00537 <span class="keywordflow">if</span> (from > e[i].time()) { 00538 l = i+1;00539 } <span class="keywordflow">else</span> { 00540 r = i;00541 }00542 }00543 assert(l == r && (l == n || e[l].time() >= from)); 00544 <span class="keywordflow">if</span> (l < n) { 00545 <span class="keywordflow">if</span> (e[l].time() <= till) {00546 first = pos = l;00547 }00548 <span class="keywordflow">return</span>;00549 }00550 } <span class="keywordflow">while</span> (blocks.next());00551 } 00552 }00553 <a name="l00558"></a><a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora1">00558</a> <span class="keywordtype">bool</span> <a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora1">current</a>(T& elem) { 00559 <span class="keywordflow">if</span> (pos >= 0) { 00560 elem = blocks->elements[pos];00561 <span class="keywordflow">return</span> <span class="keyword">true</span>;00562 }00563 <span class="keywordflow">return</span> <span class="keyword">false</span>;00564 }00565 <a name="l00570"></a><a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora2">00570</a> <span class="keywordtype">bool</span> <a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora2">next</a>() { 00571 <span class="keywordflow">if</span> (pos >= 0) { 00572 <span class="keywordflow">if</span> (++pos == blocks->used) { 00573 <span class="keywordflow">if</span> (!blocks.next()) { 00574 pos = -1;00575 <span class="keywordflow">return</span> <span class="keyword">false</span>;00576 }00577 pos = 0;00578 }00579 <span class="keywordflow">if</span> (blocks->elements[pos].time() <= till) {00580 <span class="keywordflow">return</span> <span class="keyword">true</span>;00581 }00582 pos = -1;00583 }00584 <span class="keywordflow">return</span> <span class="keyword">false</span>;00585 }00586 <a name="l00590"></a><a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora3">00590</a> <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora3">reset</a>() { 00591 blocks.first();00592 pos = first;00593 }00594 <a name="l00599"></a><a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora4">00599</a> <a class="code" href="classdbTimeSeriesIterator.html#dbTimeSeriesIteratora4">dbTimeSeriesIterator</a>() {00600 first = pos = -1;00601 }00602 <span class="keyword">private</span>:00603 <a class="code" href="classdbCursor.html">dbCursor< dbTimeSeriesBlock<T></a> > blocks;00604 <span class="keywordtype">int</span> pos;00605 <span class="keywordtype">int</span> first;00606 time_t till;00607 };00608 00612 <span class="keyword">template</span><<span class="keyword">class</span> T><a name="l00613"></a><a class="code" href="classdbTimeSeriesReverseIterator.html">00613</a> <span class="keyword">class </span><a class="code" href="classdbTimeSeriesReverseIterator.html">dbTimeSeriesReverseIterator</a> { 00614 <span class="keyword">public</span>:<a name="l00622"></a><a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora0">00622</a> <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora0">start</a>(<a class="code" href="classdbTimeSeriesProcessor.html">dbTimeSeriesProcessor<T></a>* processor, oid_t oid, time_t from, time_t till) { 00623 last = pos = -1;00624 this->from = from;00625 <span class="keywordflow">if</span> (processor-><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora14">_openIteratorCursor</a>(blocks, oid, from, till)) { 00626 <span class="keywordflow">do</span> { 00627 <span class="keywordtype">int</span> n = blocks->used;00628 blocks.last();00629 T <span class="keyword">const</span>* e = blocks->elements.get();00630 <span class="keywordtype">int</span> l = 0, r = n;00631 <span class="keywordflow">while</span> (l < r) {00632 <span class="keywordtype">int</span> i = (l+r) >> 1;00633 <span class="keywordflow">if</span> (till >= e[i].time()) { 00634 l = i+1;00635 } <span class="keywordflow">else</span> { 00636 r = i;00637 }00638 }00639 assert(l == r && (l == n || e[l].time() > till)); 00640 <span class="keywordflow">if</span> (l > 0) {00641 <span class="keywordflow">if</span> (e[l-1].time() >= from) {00642 last = pos = l-1;00643 }00644 <span class="keywordflow">return</span>;00645 }00646 } <span class="keywordflow">while</span> (blocks.prev());00647 } 00648 }00649 <a name="l00654"></a><a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora1">00654</a> <span class="keywordtype">bool</span> <a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora1">current</a>(T& elem) { 00655 <span class="keywordflow">if</span> (pos >= 0) { 00656 elem = blocks->elements[pos];00657 <span class="keywordflow">return</span> <span class="keyword">true</span>;00658 }00659 <span class="keywordflow">return</span> <span class="keyword">false</span>;00660 }00661 <a name="l00666"></a><a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora2">00666</a> <span class="keywordtype">bool</span> <a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora2">next</a>() { 00667 <span class="keywordflow">if</span> (pos >= 0) { 00668 <span class="keywordflow">if</span> (--pos < 0) {00669 <span class="keywordflow">if</span> (!blocks.prev()) { 00670 <span class="keywordflow">return</span> <span class="keyword">false</span>;00671 }00672 pos = blocks->used-1;00673 }00674 <span class="keywordflow">if</span> (blocks->elements[pos].time() >= from) {00675 <span class="keywordflow">return</span> <span class="keyword">true</span>;00676 }00677 pos = -1;00678 }00679 <span class="keywordflow">return</span> <span class="keyword">false</span>;00680 }00681 <a name="l00685"></a><a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora3">00685</a> <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora3">reset</a>() { 00686 blocks.last();00687 pos = last;00688 }00689 <a name="l00694"></a><a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora4">00694</a> <a class="code" href="classdbTimeSeriesReverseIterator.html#dbTimeSeriesReverseIteratora4">dbTimeSeriesReverseIterator</a>() {00695 last = pos = -1;00696 }00697 <span class="keyword">private</span>:00698 <a class="code" href="classdbCursor.html">dbCursor< dbTimeSeriesBlock<T></a> > blocks;00699 <span class="keywordtype">int</span> pos;00700 <span class="keywordtype">int</span> last;00701 time_t from;00702 };00703 00704 <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 + -