array_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 282 行 · 第 1/2 页

HTML
282
字号
<!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>array.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.15 --><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>array.h</h1><div class="fragment"><pre>00001 <font class="comment">//-&lt; ARRAY.H &gt;-------------------------------------------------------*--------*</font>00002 <font class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</font>00003 <font class="comment">// (Main Memory Database Management System)                          *   /\|  *</font>00004 <font class="comment">//                                                                   *  /  \  *</font>00005 <font class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</font>00006 <font class="comment">//                          Last update: 20-Dec-98    K.A. Knizhnik  * GARRET *</font>00007 <font class="comment">//-------------------------------------------------------------------*--------*</font>00008 <font class="comment">// Array type for table record fields</font>00009 <font class="comment">//-------------------------------------------------------------------*--------*</font>00010 00011 <font class="preprocessor">#ifndef __ARRAY_H__</font>00012 <font class="preprocessor"></font><font class="preprocessor">#define __ARRAY_H__</font>00013 <font class="preprocessor"></font><a name="l00017"></a><a class="code" href="classdbAnyArray.html">00017</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY <a class="code" href="classdbAnyArray.html">dbAnyArray</a> { 00018     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;00019   <font class="keyword">protected</font>:00020     size_t len;00021 00022   <font class="keyword">public</font>:00023     <font class="keyword">static</font> <font class="keywordtype">void</font> arrayAllocator(<a class="code" href="classdbAnyArray.html">dbAnyArray</a>* aArray, <font class="keywordtype">void</font>* data, size_t length)00024     {00025         aArray-&gt;<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4n2">len</a> = length;00026         *(<font class="keywordtype">void</font>**)(aArray+1) = data;00027     }<a name="l00032"></a><a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">00032</a>     size_t length()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> len; }00033 <a name="l00038"></a><a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a19">00038</a>     <font class="keywordtype">void</font> <font class="keyword">const</font>* base()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> *(<font class="keywordtype">void</font>**)(<font class="keyword">this</font>+1); }00039 };    00040 00041 00045 <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;<a name="l00046"></a><a class="code" href="classdbArray.html">00046</a> <font class="keyword">class </font><a class="code" href="classdbArray.html">dbArray</a> : <font class="keyword">public</font> <a class="code" href="classdbAnyArray.html">dbAnyArray</a> { 00047     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;00048   <font class="keyword">protected</font>:00049     T*     data;00050     size_t allocated;00051     00052     <font class="keyword">static</font> <font class="keywordtype">void</font> arrayAllocator(<a class="code" href="classdbAnyArray.html">dbAnyArray</a>* aArray, <font class="keywordtype">void</font>* data, size_t <a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a>)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_4n2">len</a> = <a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a>;00056         <font class="keywordflow">if</font> (array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a>) { 00057             <font class="keyword">delete</font>[] array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a>;00058         }00059         <font class="keywordflow">if</font> (data != NULL || <a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a> == 0) { 00060             array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a> = (T*)data;00061             array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = 0;00062         } <font class="keywordflow">else</font> { 00063             array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a> = <font class="keyword">new</font> T[<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a>];00064             array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = <a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a>;00065         }00066     }00067  00068     <font class="keyword">inline</font> <font class="keywordtype">void</font> memcpy(T* dst, T <font class="keyword">const</font>* src, <font class="keywordtype">int</font> n) { 00069         <font class="keywordflow">while</font> (--n &gt;= 0) { 00070             *dst++ = *src++;00071         }00072     }00073 00074     <font class="keyword">inline</font> <font class="keywordtype">void</font> memmove(T* dst, T <font class="keyword">const</font>* src, <font class="keywordtype">int</font> n) { 00075         <font class="keywordflow">if</font> (dst &lt; src) {00076             <font class="keywordflow">while</font> (--n &gt;= 0) { 00077                 *dst++ = *src++;00078             }00079         } <font class="keywordflow">else</font> { 00080             dst += n;00081             src += n;       00082             <font class="keywordflow">while</font> (--n &gt;= 0) { 00083                 *--dst = *--src;00084             }00085         }00086     }00087  00088   <font class="keyword">public</font>: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#dbFieldDescriptorm14">type</a> = fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpArray;00091         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <font class="keyword">sizeof</font>(dbVarying);00092         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;00093         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm31">arrayAllocator</a> = arrayAllocator;00094         <font class="keywordflow">return</font> dbDescribeField(<font class="keyword">new</font> <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>(<font class="stringliteral">"[]"</font>, 0, <font class="keyword">sizeof</font>(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         <font class="keywordflow">if</font> (size != 0) { 00113             data = <font class="keyword">new</font> 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 <font class="keyword">const</font>* ptr, size_t size, size_t allocate = 0) { 00127         len = size;00128         allocated = allocate;00129         <font class="keywordflow">if</font> (allocate != 0) { 00130             assert(allocate &gt;= size);00131             data = <font class="keyword">new</font> T[allocate];00132             memcpy(data, ptr, size);    00133         } <font class="keywordflow">else</font> { 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> <font class="keyword">const</font>&amp; arr) { 00143         allocated = arr.<a class="code" href="classdbArray.html#dbArrayn1">allocated</a>;00144         len = arr.<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4n2">len</a>;00145         <font class="keywordflow">if</font> (allocated) { 00146             data = <font class="keyword">new</font> T[allocated];00147             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>, len);        00148         } <font class="keywordflow">else</font> { 00149             data = arr.<a class="code" href="classdbArray.html#dbArrayn0">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         <font class="keywordflow">if</font> (allocated) { 00158             <font class="keyword">delete</font>[] 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> <font class="keyword">const</font>&amp; arr) { 00167         <font class="keywordflow">if</font> (<font class="keyword">this</font> == &amp;arr) { 00168             <font class="keywordflow">return</font> *<font class="keyword">this</font>;00169         }00170         <font class="keywordflow">if</font> (allocated) { 00171             <font class="keyword">delete</font>[] data;00172         }

⌨️ 快捷键说明

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