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

📄 timeseries_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: timeseries.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><h1>timeseries.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; TIMESERIES.H &gt;--------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>00003 <span class="comment">// (Post Relational Database Management System)                      *   /\|  *</span>00004 <span class="comment">//                                                                   *  /  \  *</span>00005 <span class="comment">//                          Created:     22-Nov-2002  K.A. Knizhnik  * / [] \ *</span>00006 <span class="comment">//                          Last update: 22-Nov-2002  K.A. Knizhnik  * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Container for time serires data</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __TIMESERIES_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __TIMESERIES_H__</span>00013 <span class="preprocessor"></span>00014 <span class="preprocessor">#include &lt;time.h&gt;</span>00015 <span class="preprocessor">#include "fastdb.h"</span>00016 00017 <span class="preprocessor">#define INFINITE_TIME 0x7fffffff</span>00018 <span class="preprocessor"></span>00068 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00069"></a><a class="code" href="classdbTimeSeriesBlock.html">00069</a> <span class="keyword">class </span><a class="code" href="classdbTimeSeriesBlock.html">dbTimeSeriesBlock</a> { 00070   <span class="keyword">public</span>:00071     db_int8 blockId;00072     db_int4 used;00073     <a class="code" href="classdbArray.html">dbArray&lt;T&gt;</a> elements;00074   00075     TYPE_DESCRIPTOR((KEY(blockId, INDEXED), FIELD(used), FIELD(elements)));00076 };00077 00078 00084 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00085"></a><a class="code" href="classdbTimeSeriesProcessor.html">00085</a> <span class="keyword">class </span><a class="code" href="classdbTimeSeriesProcessor.html">dbTimeSeriesProcessor</a> { 00086     <span class="keyword">struct </span>Interval { 00087         db_int8 from;00088         db_int8 till;00089     };00090 00091   <span class="keyword">public</span>:<a name="l00096"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora0">00096</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora0">process</a>(T <span class="keyword">const</span>&amp;) {}00097     <a name="l00103"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora1">00103</a>     <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora1">add</a>(oid_t oid, T <span class="keyword">const</span>&amp; data) 00104     { 00105         Interval interval;00106         interval.from = generateBlockId(oid, data.time() - maxBlockTimeInterval);00107         interval.till = generateBlockId(oid, data.time());00108         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00109         blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">select</a>(selectBlock, dbCursorForUpdate, &amp;interval);00110         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora6">last</a>()) { 00111             insertInBlock(oid, blocks, data);00112         } <span class="keywordflow">else</span> { 00113             addNewBlock(oid, data);00114         }00115     }00116 <a name="l00123"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora2">00123</a>     <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora2">select</a>(oid_t oid, time_t from, time_t till) 00124     { 00125         Interval interval;00126         interval.from = generateBlockId(oid, from - maxBlockTimeInterval);00127         interval.till = generateBlockId(oid, till);00128         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00129         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) { 00130             <span class="keywordflow">do</span> { 00131                 <span class="keywordtype">int</span> n = blocks-&gt;used;00132                 T <span class="keyword">const</span>* e =  blocks-&gt;elements.<a class="code" href="classdbCursor.html#dbCursora2">get</a>();00133                 <span class="keywordtype">int</span> l = 0, r = n;00134                 <span class="keywordflow">while</span> (l &lt; r)  {00135                     <span class="keywordtype">int</span> i = (l+r) &gt;&gt; 1;00136                     <span class="keywordflow">if</span> (from &gt; e[i].time()) { 00137                         l = i+1;00138                     } <span class="keywordflow">else</span> { 00139                         r = i;00140                     }00141                 }00142                 assert(l == r &amp;&amp; (l == n || e[l].time() &gt;= from)); 00143                 <span class="keywordflow">while</span> (l &lt; n &amp;&amp; e[l].time() &lt;= till) {00144                     <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora0">process</a>(e[l++]);00145                 }00146             } <span class="keywordflow">while</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora3">next</a>());00147         }00148     }00149     <a name="l00155"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora3">00155</a>     time_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora3">getFirstTime</a>(oid_t oid) 00156     {00157         Interval interval;00158         interval.from = generateBlockId(oid, 0);00159         interval.till = generateBlockId(oid, INFINITE_TIME);00160         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00161         blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a32">setSelectionLimit</a>(1);00162         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) { 00163             <span class="keywordflow">return</span> blocks-&gt;elements[0].time();00164         }00165         <span class="keywordflow">return</span> (time_t)-1;00166     }00167     <a name="l00173"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora4">00173</a>     time_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora4">getLastTime</a>(oid_t oid) 00174     {00175         Interval interval;00176         interval.from = generateBlockId(oid, 0);00177         interval.till = generateBlockId(oid, INFINITE_TIME);00178         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00179         blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a32">setSelectionLimit</a>(1);00180         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">select</a>(selectBlockReverse, dbCursorViewOnly, &amp;interval)) { 00181             <span class="keywordflow">return</span> blocks-&gt;elements[blocks-&gt;used-1].time();00182         }00183         <span class="keywordflow">return</span> (time_t)-1;00184     }00185     <a name="l00191"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora5">00191</a>     size_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora5">getNumberOfElements</a>(oid_t oid) 00192     {00193         Interval interval;00194         interval.from = generateBlockId(oid, 0);00195         interval.till = generateBlockId(oid, INFINITE_TIME);00196         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00197         <span class="keywordtype">int</span> n = 0;00198         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) {00199             <span class="keywordflow">do</span> { 00200                 n += blocks-&gt;used;00201             } <span class="keywordflow">while</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora3">next</a>());00202         }00203         <span class="keywordflow">return</span> n;00204     }00205         <a name="l00215"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora6">00215</a>     size_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora6">getInterval</a>(oid_t oid, time_t from, time_t till, T* buf, size_t bufSize) 00216     { 00217         Interval interval;00218         interval.from = generateBlockId(oid, from == 0 ? 0 : from - maxBlockTimeInterval);00219         interval.till = generateBlockId(oid, till);00220         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00221         size_t nSelected = 0;00222         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) { 00223             <span class="keywordflow">do</span> { 00224                 <span class="keywordtype">int</span> n = blocks-&gt;used;00225                 T <span class="keyword">const</span>* e =  blocks-&gt;elements.<a class="code" href="classdbCursor.html#dbCursora2">get</a>();00226                 <span class="keywordtype">int</span> l = 0, r = n;00227                 <span class="keywordflow">while</span> (l &lt; r)  {00228                     <span class="keywordtype">int</span> i = (l+r) &gt;&gt; 1;00229                     <span class="keywordflow">if</span> (from &gt; e[i].time()) { 00230                         l = i+1;00231                     } <span class="keywordflow">else</span> { 00232                         r = i;00233                     }00234                 }00235                 assert(l == r &amp;&amp; (l == n || e[l].time() &gt;= from)); 00236                 <span class="keywordflow">while</span> (l &lt; n &amp;&amp; e[l].time() &lt;= till) {00237                     <span class="keywordflow">if</span> (nSelected &lt; bufSize) { 00238                         buf[nSelected] = e[l];00239                     }00240                     l += 1;00241                     nSelected += 1;00242                 }00243             } <span class="keywordflow">while</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora3">next</a>());00244         }00245         <span class="keywordflow">return</span> nSelected;00246     }        00247         <a name="l00255"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora7">00255</a>     <span class="keywordtype">bool</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora7">getElement</a>(oid_t oid, T&amp; elem, time_t t) 00256     { 00257         <span class="keywordflow">return</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora6">getInterval</a>(oid, t, t, &amp;elem, 1) == 1;00258     }        00259         <a name="l00269"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora8">00269</a>     size_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora8">getFirstInterval</a>(oid_t oid, time_t till, T* buf, size_t bufSize) 00270     {00271         <span class="keywordflow">if</span> (bufSize == 0) { 00272             <span class="keywordflow">return</span> 0;00273         }00274         Interval interval;00275         interval.from = generateBlockId(oid, 0);00276         interval.till = generateBlockId(oid, till);

⌨️ 快捷键说明

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