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

📄 array_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 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_NAMESPACE
00015 
00016 <span class="preprocessor">#ifdef index // at some platform index(s,c) is defined strchr(s,x)</span>
00017 <span class="preprocessor"></span><span class="preprocessor">#undef index</span>
00018 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00019 <span class="preprocessor"></span>
00020 <span class="preprocessor">#ifdef rindex // at some platform rindex(s,c) is defined strrchr(s,x)</span>
00021 <span class="preprocessor"></span><span class="preprocessor">#undef rindex</span>
00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00023 <span class="preprocessor"></span>
<a name="l00027"></a><a class="code" href="classdbAnyArray.html">00027</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY <a class="code" href="classdbAnyArray.html">dbAnyArray</a> { 
00028     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;
00029   <span class="keyword">protected</span>:
00030     size_t len;
00031 
00032   <span class="keyword">public</span>:
00033     <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)
00034     {
00035         aArray-&gt;<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a> = length;
00036         *(<span class="keywordtype">void</span>**)(aArray+1) = data;
00037     }
<a name="l00042"></a><a class="code" href="classdbAnyArray.html#dbArraya20">00042</a>     size_t length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> len; }
00043 
<a name="l00048"></a><a class="code" href="classdbAnyArray.html#dbArraya21">00048</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); }
00049 };    
00050 
00051 
00055 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
<a name="l00056"></a><a class="code" href="classdbArray.html">00056</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> { 
00057     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>;
00058   <span class="keyword">protected</span>:
00059     T*     data;
00060     size_t allocated;
00061     
00062     <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#dbArraya20">length</a>)
00063     {
00064         <a class="code" href="classdbArray.html">dbArray</a>* array = (<a class="code" href="classdbArray.html">dbArray</a>*)aArray;
00065         array-&gt;<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a> = <a class="code" href="classdbAnyArray.html#dbArraya20">length</a>;
00066         <span class="keywordflow">if</span> (array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a>) { 
00067             <span class="keyword">delete</span>[] array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a>;
00068         }
00069         <span class="keywordflow">if</span> (data != NULL || <a class="code" href="classdbAnyArray.html#dbArraya20">length</a> == 0) { 
00070             array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a> = (T*)data;
00071             array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = 0;
00072         } <span class="keywordflow">else</span> { 
00073             array-&gt;<a class="code" href="classdbArray.html#dbArrayn0">data</a> = <span class="keyword">new</span> T[<a class="code" href="classdbAnyArray.html#dbArraya20">length</a>];
00074             array-&gt;<a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = <a class="code" href="classdbAnyArray.html#dbArraya20">length</a>;
00075         }
00076     }
00077  
00078     <span class="keyword">inline</span> <span class="keywordtype">void</span> memcpy(T* dst, T <span class="keyword">const</span>* src, size_t len) { 
00079         <span class="keywordtype">int</span> n = (int)len;
00080         <span class="keywordflow">while</span> (--n &gt;= 0) { 
00081             *dst++ = *src++;
00082         }
00083     }
00084 
00085     <span class="keyword">inline</span> <span class="keywordtype">void</span> memmove(T* dst, T <span class="keyword">const</span>* src, size_t len) { 
00086         <span class="keywordtype">int</span> n = (int)len;
00087         <span class="keywordflow">if</span> (dst &lt; src) {
00088             <span class="keywordflow">while</span> (--n &gt;= 0) { 
00089                 *dst++ = *src++;
00090             }
00091         } <span class="keywordflow">else</span> { 
00092             dst += n;
00093             src += n;       
00094             <span class="keywordflow">while</span> (--n &gt;= 0) { 
00095                 *--dst = *--src;
00096             }
00097         }
00098     }
00099  
00100   <span class="keyword">public</span>:
00101     <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* dbDescribeComponents(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) { 
00102         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpArray;
00103         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying);
00104         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;
00105         fd-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm31">arrayAllocator</a> = arrayAllocator;
00106         <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),
00107                                *(T*)fd); 
00108     }
00109 
<a name="l00113"></a><a class="code" href="classdbArray.html#dbArraya1">00113</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>() { 
00114         data = NULL; 
00115         len = 0;
00116         allocated = 0;
00117     }
00118 
<a name="l00123"></a><a class="code" href="classdbArray.html#dbArraya2">00123</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(size_t size) { 
00124         data = (size != 0) <span class="keyword">new</span> T[size] : NULL;
00125         len = size;
00126         allocated = size;
00127     }
00128 
<a name="l00136"></a><a class="code" href="classdbArray.html#dbArraya3">00136</a>     <a class="code" href="classdbArray.html#dbArraya1">dbArray</a>(T <span class="keyword">const</span>* ptr, size_t size, size_t allocate = 0) { 
00137         len = size;
00138         allocated = allocate;
00139         <span class="keywordflow">if</span> (allocate != 0) { 
00140             assert(allocate &gt;= size);
00141             data = <span class="keyword">new</span> T[allocate];
00142             memcpy(data, ptr, size);    
00143         } <span class="keywordflow">else</span> { 
00144             data = (T*)ptr;
00145         }
00146     }
00147 
<a name="l00152"></a><a class="code" href="classdbArray.html#dbArraya4">00152</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) { 
00153         allocated = arr.<a class="code" href="classdbArray.html#dbArrayn1">allocated</a>;
00154         len = arr.<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a>;
00155         <span class="keywordflow">if</span> (allocated) { 
00156             data = <span class="keyword">new</span> T[allocated];
00157             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>, len);        
00158         } <span class="keywordflow">else</span> { 
00159             data = arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>;
00160         }
00161     }
00162 
<a name="l00166"></a><a class="code" href="classdbArray.html#dbArraya5">00166</a>     <a class="code" href="classdbArray.html#dbArraya5">~dbArray</a>() { 
00167         <span class="keywordflow">if</span> (allocated) { 
00168             <span class="keyword">delete</span>[] data;
00169         }
00170     }
00171 
<a name="l00176"></a><a class="code" href="classdbArray.html#dbArraya6">00176</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) { 
00177         <span class="keywordflow">if</span> (<span class="keyword">this</span> == &amp;arr) { 
00178             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00179         }
00180         <span class="keywordflow">if</span> (allocated) { 
00181             <span class="keyword">delete</span>[] data;
00182         }
00183         <span class="keywordflow">if</span> ((len = arr.<a class="code" href="classdbAnyArray.html#dbArrayn2">len</a>) != 0) { 
00184             data = <span class="keyword">new</span> T[len];
00185             memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>, len);
00186         }
00187         allocated = len;
00188         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00189     }

⌨️ 快捷键说明

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