📄 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_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-><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><<span class="keyword">class</span> T>
<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-><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-><a class="code" href="classdbArray.html#dbArrayn1">allocated</a>) {
00067 <span class="keyword">delete</span>[] array-><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-><a class="code" href="classdbArray.html#dbArrayn0">data</a> = (T*)data;
00071 array-><a class="code" href="classdbArray.html#dbArrayn1">allocated</a> = 0;
00072 } <span class="keywordflow">else</span> {
00073 array-><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-><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 >= 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 < src) {
00088 <span class="keywordflow">while</span> (--n >= 0) {
00089 *dst++ = *src++;
00090 }
00091 } <span class="keywordflow">else</span> {
00092 dst += n;
00093 src += n;
00094 <span class="keywordflow">while</span> (--n >= 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-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> = fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm15">appType</a> = dbField::tpArray;
00103 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm22">dbsSize</a> = <span class="keyword">sizeof</span>(dbVarying);
00104 fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm24">alignment</a> = 4;
00105 fd-><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 >= 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>& 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>& <a class="code" href="classdbArray.html#dbArraya6">operator = </a>(<a class="code" href="classdbArray.html">dbArray</a> <span class="keyword">const</span>& arr) {
00177 <span class="keywordflow">if</span> (<span class="keyword">this</span> == &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 + -