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

📄 timeseries_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 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_NAMESPACE
00017 
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_int4 used;
00073     db_int8 blockId;
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_4a20">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_4a20">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_4a31">setSelectionLimit</a>(1);
00163         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a20">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_4a31">setSelectionLimit</a>(1);
00181         <span class="keywordflow">if</span> (blocks.<a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a20">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_4a20">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_4a20">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 + -