📄 array_8h-source.html
字号:
<!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> <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 <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>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-><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><<span class="keyword">class</span> T><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-><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-><a class="code" href="classdbArray.html#dbArrayn1">allocated</a>) { 00059 <span class="keyword">delete</span>[] array-><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-><a class="code" href="classdbArray.html#dbArrayn0">data</a> = (T*)data;00063 array-><a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = 0;00064 } <span class="keywordflow">else</span> { 00065 array-><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-><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 >= 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 < src) {00080 <span class="keywordflow">while</span> (--n >= 0) { 00081 *dst++ = *src++;00082 }00083 } <span class="keywordflow">else</span> { 00084 dst += n;00085 src += n; 00086 <span class="keywordflow">while</span> (--n >= 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-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpArray;00095 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying);00096 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;00097 fd-><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 >= 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>& 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>& <a class="code" href="classdbArray.html#dbArraya6">operator = </a>(<a class="code" href="classdbArray.html">dbArray</a> <span class="keyword">const</span>& arr) { 00171 <span class="keywordflow">if</span> (<span class="keyword">this</span> == &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 + -