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

📄 array_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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: array.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>array.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; ARRAY.H &gt;-------------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>00003 <span class="comment">// (Main Memory Database Management System)                          *   /\|  *</span>00004 <span class="comment">//                                                                   *  /  \  *</span>00005 <span class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</span>00006 <span class="comment">//                          Last update: 20-Dec-98    K.A. Knizhnik  * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Array type for table record fields</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __ARRAY_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __ARRAY_H__</span>00013 <span class="preprocessor"></span><a name="l00017"></a><a class="code" href="classdbAnyArray.html">00017</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbAnyArray { 00018     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;00019   <span class="keyword">protected</span>:00020     size_t len;00021 00022   <span class="keyword">public</span>:00023     <span class="keyword">static</span> <span class="keywordtype">void</span> arrayAllocator(dbAnyArray* aArray, <span class="keywordtype">void</span>* data, size_t length)00024     {00025         aArray-&gt;<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4p2">len</a> = length;00026         *(<span class="keywordtype">void</span>**)(aArray+1) = data;00027     }<a name="l00032"></a><a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a19">00032</a>     size_t length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> len; }00033 <a name="l00038"></a><a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a20">00038</a>     <span class="keywordtype">void</span> <span class="keyword">const</span>* base()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *(<span class="keywordtype">void</span>**)(<span class="keyword">this</span>+1); }00039 };    00040 00041 00045 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00046"></a><a class="code" href="classdbArray.html">00046</a> <span class="keyword">class </span><a class="code" href="classdbArray.html">dbArray</a> : <span class="keyword">public</span> dbAnyArray { 00047     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;00048   <span class="keyword">protected</span>:00049     T*     data;00050     size_t allocated;00051     00052     <span class="keyword">static</span> <span class="keywordtype">void</span> arrayAllocator(dbAnyArray* aArray, <span class="keywordtype">void</span>* data, size_t length)00053     {00054         <a class="code" href="classdbArray.html">dbArray</a>* array = (<a class="code" href="classdbArray.html">dbArray</a>*)aArray;00055         array-&gt;<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4p2">len</a> = length;00056         <span class="keywordflow">if</span> (array-&gt;<a class="code" href="classdbArray.html#dbArrayp1">allocated</a>) { 00057             <span class="keyword">delete</span>[] array-&gt;<a class="code" href="classdbArray.html#dbArrayp0">data</a>;00058         }00059         <span class="keywordflow">if</span> (data != NULL || length == 0) { 00060             array-&gt;<a class="code" href="classdbArray.html#dbArrayp0">data</a> = (T*)data;00061             array-&gt;<a class="code" href="classdbArray.html#dbArrayp1">allocated</a> = 0;00062         } <span class="keywordflow">else</span> { 00063             array-&gt;<a class="code" href="classdbArray.html#dbArrayp0">data</a> = <span class="keyword">new</span> T[length];00064             array-&gt;<a class="code" href="classdbArray.html#dbArrayp1">allocated</a> = length;00065         }00066     }00067  00068     <span class="keyword">inline</span> <span class="keywordtype">void</span> memcpy(T* dst, T <span class="keyword">const</span>* src, <span class="keywordtype">int</span> n) { 00069         <span class="keywordflow">while</span> (--n &gt;= 0) { 00070             *dst++ = *src++;00071         }00072     }00073 00074     <span class="keyword">inline</span> <span class="keywordtype">void</span> memmove(T* dst, T <span class="keyword">const</span>* src, <span class="keywordtype">int</span> n) { 00075         <span class="keywordflow">if</span> (dst &lt; src) {00076             <span class="keywordflow">while</span> (--n &gt;= 0) { 00077                 *dst++ = *src++;00078             }00079         } <span class="keywordflow">else</span> { 00080             dst += n;00081             src += n;       00082             <span class="keywordflow">while</span> (--n &gt;= 0) { 00083                 *--dst = *--src;00084             }00085         }00086     }00087  00088   <span class="keyword">public</span>:00089     <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* dbDescribeComponents(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) { 00090         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a> = fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro15">appType</a> = dbField::tpArray;00091         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro22">dbsSize</a> = <span class="keyword">sizeof</span>(<a class="code" href="structdbVarying.html">dbVarying</a>);00092         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro24">alignment</a> = 4;00093         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro31">arrayAllocator</a> = arrayAllocator;00094         <span class="keywordflow">return</span> dbDescribeField(<span class="keyword">new</span> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>(<span class="stringliteral">"[]"</span>, 0, <span class="keyword">sizeof</span>(T), 0),00095                                *(T*)fd); 00096     }00097 <a name="l00101"></a><a class="code" href="classdbArray.html#dbArraya1">00101</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>() { 00102         data = NULL; 00103         len = 0;00104         allocated = 0;00105     }00106 <a name="l00111"></a><a class="code" href="classdbArray.html#dbArraya2">00111</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(size_t size) { 00112         <span class="keywordflow">if</span> (size != 0) { 00113             data = <span class="keyword">new</span> T[size]; 00114         }00115         len = size;00116         allocated = size;00117     }00118 <a name="l00126"></a><a class="code" href="classdbArray.html#dbArraya3">00126</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(T <span class="keyword">const</span>* ptr, size_t size, size_t allocate = 0) { 00127         len = size;00128         allocated = allocate;00129         <span class="keywordflow">if</span> (allocate != 0) { 00130             assert(allocate &gt;= size);00131             data = <span class="keyword">new</span> T[allocate];00132             memcpy(data, ptr, size);    00133         } <span class="keywordflow">else</span> { 00134             data = (T*)ptr;00135         }00136     }00137 <a name="l00142"></a><a class="code" href="classdbArray.html#dbArraya4">00142</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(<a class="code" href="classdbArray.html">dbArray</a> <span class="keyword">const</span>&amp; arr) { 00143         allocated = arr.<a class="code" href="classdbArray.html#dbArrayp1">allocated</a>;00144         len = arr.<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4p2">len</a>;00145         <span class="keywordflow">if</span> (allocated) { 00146             data = <span class="keyword">new</span> T[allocated];00147             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayp0">data</a>, len);        00148         } <span class="keywordflow">else</span> { 00149             data = arr.<a class="code" href="classdbArray.html#dbArrayp0">data</a>;00150         }00151     }00152 <a name="l00156"></a><a class="code" href="classdbArray.html#dbArraya5">00156</a>     <a class="code" href="classdbArray.html#dbArraya5">~dbArray</a>() { 00157         <span class="keywordflow">if</span> (allocated) { 00158             <span class="keyword">delete</span>[] data;00159         }00160     }00161 <a name="l00166"></a><a class="code" href="classdbArray.html#dbArraya6">00166</a>     <a class="code" href="classdbArray.html">dbArray</a>&amp; <a class="code" href="classdbArray.html#dbArraya6">operator = </a>(<a class="code" href="classdbArray.html">dbArray</a> <span class="keyword">const</span>&amp; arr) { 00167         <span class="keywordflow">if</span> (<span class="keyword">this</span> == &amp;arr) { 00168             <span class="keywordflow">return</span> *<span class="keyword">this</span>;00169         }00170         <span class="keywordflow">if</span> (allocated) { 00171             <span class="keyword">delete</span>[] data;00172         }00173         <span class="keywordflow">if</span> ((len = arr.<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4p2">len</a>) != 0) { 00174             data = <span class="keyword">new</span> T[len];00175             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayp0">data</a>, len);00176         }00177         allocated = len;00178         <span class="keywordflow">return</span> *<span class="keyword">this</span>;

⌨️ 快捷键说明

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