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