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

📄 array_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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.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>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>00014 BEGIN_FASTDB_NAMESPACE00015 <a name="l00019"></a><a class="code" href="classdbAnyArray.html">00019</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY <a class="code" href="classdbAnyArray.html">dbAnyArray</a> { 00020     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;00021   <span class="keyword">protected</span>:00022     size_t len;00023 00024   <span class="keyword">public</span>:00025     <span class="keyword">static</span> <span class="keywordtype">void</span> arrayAllocator(<a class="code" href="classdbAnyArray.html">dbAnyArray</a>* aArray, <span class="keywordtype">void</span>* data, size_t length)00026     {00027         aArray-&gt;<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a> = length;00028         *(<span class="keywordtype">void</span>**)(aArray+1) = data;00029     }<a name="l00034"></a><a class="code" href="classdbAnyArray.html#dbArraya19">00034</a>     size_t length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> len; }00035 <a name="l00040"></a><a class="code" href="classdbAnyArray.html#dbArraya20">00040</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">const</span>*)(<span class="keyword">this</span>+1); }00041 };    00042 00043 00047 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00048"></a><a class="code" href="classdbArray.html">00048</a> <span class="keyword">class </span><a class="code" href="classdbArray.html">dbArray</a> : <span class="keyword">public</span> <a class="code" href="classdbAnyArray.html">dbAnyArray</a> { 00049     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;00050   <span class="keyword">protected</span>:00051     T*     data;00052     size_t allocated;00053     00054     <span class="keyword">static</span> <span class="keywordtype">void</span> arrayAllocator(<a class="code" href="classdbAnyArray.html">dbAnyArray</a>* aArray, <span class="keywordtype">void</span>* data, size_t <a class="code" href="classdbAnyArray.html#dbArraya19">length</a>)00055     {00056         <a class="code" href="classdbArray.html">dbArray</a>* array = (<a class="code" href="classdbArray.html">dbArray</a>*)aArray;00057         array-&gt;<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a> = <a class="code" href="classdbAnyArray.html#dbArraya19">length</a>;00058         <span class="keywordflow">if</span> (array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a>) { 00059             <span class="keyword">delete</span>[] array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a>;00060         }00061         <span class="keywordflow">if</span> (data != NULL || <a class="code" href="classdbAnyArray.html#dbArraya19">length</a> == 0) { 00062             array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a> = (T*)data;00063             array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = 0;00064         } <span class="keywordflow">else</span> { 00065             array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a> = <span class="keyword">new</span> T[<a class="code" href="classdbAnyArray.html#dbArraya19">length</a>];00066             array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = <a class="code" href="classdbAnyArray.html#dbArraya19">length</a>;00067         }00068     }00069  00070     <span class="keyword">inline</span> <span class="keywordtype">void</span> memcpy(T* dst, T <span class="keyword">const</span>* src, size_t len) { 00071         <span class="keywordtype">int</span> n = (int)len;00072         <span class="keywordflow">while</span> (--n &gt;= 0) { 00073             *dst++ = *src++;00074         }00075     }00076 00077     <span class="keyword">inline</span> <span class="keywordtype">void</span> memmove(T* dst, T <span class="keyword">const</span>* src, size_t len) { 00078         <span class="keywordtype">int</span> n = (int)len;00079         <span class="keywordflow">if</span> (dst &lt; src) {00080             <span class="keywordflow">while</span> (--n &gt;= 0) { 00081                 *dst++ = *src++;00082             }00083         } <span class="keywordflow">else</span> { 00084             dst += n;00085             src += n;       00086             <span class="keywordflow">while</span> (--n &gt;= 0) { 00087                 *--dst = *--src;00088             }00089         }00090     }00091  00092   <span class="keyword">public</span>:00093     <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* dbDescribeComponents(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) { 00094         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpArray;00095         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying);00096         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;00097         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm31">arrayAllocator</a> = arrayAllocator;00098         <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),00099                                *(T*)fd); 00100     }00101 <a name="l00105"></a><a class="code" href="classdbArray.html#dbArraya1">00105</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>() { 00106         data = NULL; 00107         len = 0;00108         allocated = 0;00109     }00110 <a name="l00115"></a><a class="code" href="classdbArray.html#dbArraya2">00115</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(size_t size) { 00116         <span class="keywordflow">if</span> (size != 0) { 00117             data = <span class="keyword">new</span> T[size]; 00118         }00119         len = size;00120         allocated = size;00121     }00122 <a name="l00130"></a><a class="code" href="classdbArray.html#dbArraya3">00130</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(T <span class="keyword">const</span>* ptr, size_t size, size_t allocate = 0) { 00131         len = size;00132         allocated = allocate;00133         <span class="keywordflow">if</span> (allocate != 0) { 00134             assert(allocate &gt;= size);00135             data = <span class="keyword">new</span> T[allocate];00136             memcpy(data, ptr, size);    00137         } <span class="keywordflow">else</span> { 00138             data = (T*)ptr;00139         }00140     }00141 <a name="l00146"></a><a class="code" href="classdbArray.html#dbArraya4">00146</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) { 00147         allocated = arr.<a class="code" href="classdbArray.html#dbArrayn1">allocated</a>;00148         len = arr.<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a>;00149         <span class="keywordflow">if</span> (allocated) { 00150             data = <span class="keyword">new</span> T[allocated];00151             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>, len);        00152         } <span class="keywordflow">else</span> { 00153             data = arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>;00154         }00155     }00156 <a name="l00160"></a><a class="code" href="classdbArray.html#dbArraya5">00160</a>     <a class="code" href="classdbArray.html#dbArraya5">~dbArray</a>() { 00161         <span class="keywordflow">if</span> (allocated) { 00162             <span class="keyword">delete</span>[] data;00163         }00164     }00165 <a name="l00170"></a><a class="code" href="classdbArray.html#dbArraya6">00170</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) { 00171         <span class="keywordflow">if</span> (<span class="keyword">this</span> == &amp;arr) { 00172             <span class="keywordflow">return</span> *<span class="keyword">this</span>;00173         }00174         <span class="keywordflow">if</span> (allocated) { 00175             <span class="keyword">delete</span>[] data;00176         }00177         <span class="keywordflow">if</span> ((len = arr.<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a>) != 0) { 00178             data = <span class="keyword">new</span> T[len];00179             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>, len);00180         }

⌨️ 快捷键说明

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