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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>array.h</h1><div class="fragment"><pre>00001 <font class="comment">//-< ARRAY.H >-------------------------------------------------------*--------*</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-><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><<font class="keyword">class</font> T><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-><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-><a class="code" href="classdbArray.html#dbArrayn1">allocated</a>) { 00057 <font class="keyword">delete</font>[] array-><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-><a class="code" href="classdbArray.html#dbArrayn0">data</a> = (T*)data;00061 array-><a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = 0;00062 } <font class="keywordflow">else</font> { 00063 array-><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-><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 >= 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 < src) {00076 <font class="keywordflow">while</font> (--n >= 0) { 00077 *dst++ = *src++;00078 }00079 } <font class="keywordflow">else</font> { 00080 dst += n;00081 src += n; 00082 <font class="keywordflow">while</font> (--n >= 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-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpArray;00091 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <font class="keyword">sizeof</font>(dbVarying);00092 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;00093 fd-><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 >= 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>& 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>& <a class="code" href="classdbArray.html#dbArraya6">operator = </a>(<a class="code" href="classdbArray.html">dbArray</a> <font class="keyword">const</font>& arr) { 00167 <font class="keywordflow">if</font> (<font class="keyword">this</font> == &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 + -
显示快捷键?