📄 array_8h-source.html
字号:
<!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 Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a></div><h1>array.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< ARRAY.H >-------------------------------------------------------*--------*</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-><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><<span class="keyword">class</span> T><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-><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-><a class="code" href="classdbArray.html#dbArrayp1">allocated</a>) { 00057 <span class="keyword">delete</span>[] array-><a class="code" href="classdbArray.html#dbArrayp0">data</a>;00058 }00059 <span class="keywordflow">if</span> (data != NULL || length == 0) { 00060 array-><a class="code" href="classdbArray.html#dbArrayp0">data</a> = (T*)data;00061 array-><a class="code" href="classdbArray.html#dbArrayp1">allocated</a> = 0;00062 } <span class="keywordflow">else</span> { 00063 array-><a class="code" href="classdbArray.html#dbArrayp0">data</a> = <span class="keyword">new</span> T[length];00064 array-><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 >= 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 < src) {00076 <span class="keywordflow">while</span> (--n >= 0) { 00077 *dst++ = *src++;00078 }00079 } <span class="keywordflow">else</span> { 00080 dst += n;00081 src += n; 00082 <span class="keywordflow">while</span> (--n >= 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-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro15">appType</a> = dbField::tpArray;00091 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro22">dbsSize</a> = <span class="keyword">sizeof</span>(<a class="code" href="structdbVarying.html">dbVarying</a>);00092 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro24">alignment</a> = 4;00093 fd-><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 >= 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>& 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>& <a class="code" href="classdbArray.html#dbArraya6">operator = </a>(<a class="code" href="classdbArray.html">dbArray</a> <span class="keyword">const</span>& arr) { 00167 <span class="keywordflow">if</span> (<span class="keyword">this</span> == &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 + -