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

📄 timeseries_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>timeseries.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><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 "fastdb.h"</span>00015 00016 BEGIN_FASTDB_NAMESPACE00017 00018 <span class="preprocessor">#define INFINITE_TIME 0x7fffffff</span>00019 <span class="preprocessor"></span>00069 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00070"></a><a class="code" href="classdbTimeSeriesBlock.html">00070</a> <span class="keyword">class </span><a class="code" href="classdbTimeSeriesBlock.html">dbTimeSeriesBlock</a> { 00071   <span class="keyword">public</span>:00072     db_int8 blockId;00073     db_int4 used;00074     <a class="code" href="classdbArray.html">dbArray&lt;T&gt;</a> elements;00075   00076     TYPE_DESCRIPTOR((KEY(blockId, INDEXED), FIELD(used), FIELD(elements)));00077 };00078 00079 00085 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00086"></a><a class="code" href="classdbTimeSeriesProcessor.html">00086</a> <span class="keyword">class </span><a class="code" href="classdbTimeSeriesProcessor.html">dbTimeSeriesProcessor</a> { 00087     <span class="keyword">struct </span>Interval { 00088         db_int8 from;00089         db_int8 till;00090     };00091 00092   <span class="keyword">public</span>:<a name="l00097"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora0">00097</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;) {}00098     <a name="l00104"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora1">00104</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) 00105     { 00106         Interval interval;00107         interval.from = generateBlockId(oid, data.time() - maxBlockTimeInterval);00108         interval.till = generateBlockId(oid, data.time());00109         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00110         blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">select</a>(selectBlock, dbCursorForUpdate, &amp;interval);00111         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora6">last</a>()) { 00112             insertInBlock(oid, blocks, data);00113         } <span class="keywordflow">else</span> { 00114             addNewBlock(oid, data);00115         }00116     }00117 <a name="l00124"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora2">00124</a>     <span class="keywordtype">void</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora2">select</a>(oid_t oid, time_t from, time_t till) 00125     { 00126         Interval interval;00127         interval.from = generateBlockId(oid, from - maxBlockTimeInterval);00128         interval.till = generateBlockId(oid, till);00129         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00130         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) { 00131             <span class="keywordflow">do</span> { 00132                 <span class="keywordtype">int</span> n = blocks-&gt;used;00133                 T <span class="keyword">const</span>* e =  blocks-&gt;elements.<a class="code" href="classdbCursor.html#dbCursora2">get</a>();00134                 <span class="keywordtype">int</span> l = 0, r = n;00135                 <span class="keywordflow">while</span> (l &lt; r)  {00136                     <span class="keywordtype">int</span> i = (l+r) &gt;&gt; 1;00137                     <span class="keywordflow">if</span> (from &gt; e[i].time()) { 00138                         l = i+1;00139                     } <span class="keywordflow">else</span> { 00140                         r = i;00141                     }00142                 }00143                 assert(l == r &amp;&amp; (l == n || e[l].time() &gt;= from)); 00144                 <span class="keywordflow">while</span> (l &lt; n &amp;&amp; e[l].time() &lt;= till) {00145                     <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora0">process</a>(e[l++]);00146                 }00147             } <span class="keywordflow">while</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora3">next</a>());00148         }00149     }00150     <a name="l00156"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora3">00156</a>     time_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora3">getFirstTime</a>(oid_t oid) 00157     {00158         Interval interval;00159         interval.from = generateBlockId(oid, 0);00160         interval.till = generateBlockId(oid, INFINITE_TIME);00161         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00162         blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a33">setSelectionLimit</a>(1);00163         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) { 00164             <span class="keywordflow">return</span> blocks-&gt;elements[0].time();00165         }00166         <span class="keywordflow">return</span> (time_t)-1;00167     }00168     <a name="l00174"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora4">00174</a>     time_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora4">getLastTime</a>(oid_t oid) 00175     {00176         Interval interval;00177         interval.from = generateBlockId(oid, 0);00178         interval.till = generateBlockId(oid, INFINITE_TIME);00179         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00180         blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a33">setSelectionLimit</a>(1);00181         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">select</a>(selectBlockReverse, dbCursorViewOnly, &amp;interval)) { 00182             <span class="keywordflow">return</span> blocks-&gt;elements[blocks-&gt;used-1].time();00183         }00184         <span class="keywordflow">return</span> (time_t)-1;00185     }00186     <a name="l00192"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora5">00192</a>     size_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora5">getNumberOfElements</a>(oid_t oid) 00193     {00194         Interval interval;00195         interval.from = generateBlockId(oid, 0);00196         interval.till = generateBlockId(oid, INFINITE_TIME);00197         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00198         <span class="keywordtype">int</span> n = 0;00199         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) {00200             <span class="keywordflow">do</span> { 00201                 n += blocks-&gt;used;00202             } <span class="keywordflow">while</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora3">next</a>());00203         }00204         <span class="keywordflow">return</span> n;00205     }00206         <a name="l00216"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora6">00216</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) 00217     { 00218         Interval interval;00219         interval.from = generateBlockId(oid, from == 0 ? 0 : from - maxBlockTimeInterval);00220         interval.till = generateBlockId(oid, till);00221         <a class="code" href="classdbCursor.html">dbCursor&lt; dbTimeSeriesBlock&lt;T&gt;</a> &gt; blocks;00222         size_t nSelected = 0;00223         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">select</a>(selectBlock, dbCursorViewOnly, &amp;interval)) { 00224             <span class="keywordflow">do</span> { 00225                 <span class="keywordtype">int</span> n = blocks-&gt;used;00226                 T <span class="keyword">const</span>* e =  blocks-&gt;elements.<a class="code" href="classdbCursor.html#dbCursora2">get</a>();00227                 <span class="keywordtype">int</span> l = 0, r = n;00228                 <span class="keywordflow">while</span> (l &lt; r)  {00229                     <span class="keywordtype">int</span> i = (l+r) &gt;&gt; 1;00230                     <span class="keywordflow">if</span> (from &gt; e[i].time()) { 00231                         l = i+1;00232                     } <span class="keywordflow">else</span> { 00233                         r = i;00234                     }00235                 }00236                 assert(l == r &amp;&amp; (l == n || e[l].time() &gt;= from)); 00237                 <span class="keywordflow">while</span> (l &lt; n &amp;&amp; e[l].time() &lt;= till) {00238                     <span class="keywordflow">if</span> (nSelected &lt; bufSize) { 00239                         buf[nSelected] = e[l];00240                     }00241                     l += 1;00242                     nSelected += 1;00243                 }00244             } <span class="keywordflow">while</span> (blocks.<a class="code" href="classdbCursor.html#dbCursora3">next</a>());00245         }00246         <span class="keywordflow">return</span> nSelected;00247     }        00248         <a name="l00256"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora7">00256</a>     <span class="keywordtype">bool</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora7">getElement</a>(oid_t oid, T&amp; elem, time_t t) 00257     { 00258         <span class="keywordflow">return</span> <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora6">getInterval</a>(oid, t, t, &amp;elem, 1) == 1;00259     }        00260         <a name="l00270"></a><a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora8">00270</a>     size_t <a class="code" href="classdbTimeSeriesProcessor.html#dbTimeSeriesProcessora8">getFirstInterval</a>(oid_t oid, time_t till, T* buf, size_t bufSize) 00271     {00272         <span class="keywordflow">if</span> (bufSize == 0) { 00273             <span class="keywordflow">return</span> 0;00274         }00275         Interval interval;00276         interval.from = generateBlockId(oid, 0);

⌨️ 快捷键说明

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