array_8h-source.html
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 282 行 · 第 1/2 页
HTML
282 行
00173 <font class="keywordflow">if</font> ((len = arr.<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4n2">len</a>) != 0) { 00174 data = <font class="keyword">new</font> T[len];00175 memcpy(data, arr.<a class="code" href="classdbArray.html#dbArrayn0">data</a>, len);00176 }00177 allocated = len;00178 <font class="keywordflow">return</font> *<font class="keyword">this</font>;00179 }00180 <a name="l00185"></a><a class="code" href="classdbArray.html#dbArraya7">00185</a> T <font class="keyword">const</font>& <a class="code" href="classdbArray.html#dbArraya7">last</a>() {00186 assert(len > 0);00187 <font class="keywordflow">return</font> data[len-1];00188 }00189 <a name="l00197"></a><a class="code" href="classdbArray.html#dbArraya8">00197</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya8">assign</a>(T <font class="keyword">const</font>* ptr, size_t size, <font class="keywordtype">bool</font> copy = <font class="keyword">true</font>) { 00198 <font class="keywordflow">if</font> (allocated) { 00199 <font class="keyword">delete</font>[] data;00200 }00201 len = size;00202 <font class="keywordflow">if</font> (copy && size != 0) { 00203 data = <font class="keyword">new</font> T[size];00204 memcpy(data, ptr, size); 00205 allocated = size;00206 } <font class="keywordflow">else</font> { 00207 data = (T*)ptr;00208 allocated = 0;00209 }00210 }00211 <a name="l00217"></a><a class="code" href="classdbArray.html#dbArraya9">00217</a> T <font class="keyword">const</font>& <a class="code" href="classdbArray.html#dbArraya9">operator []</a>(size_t index)<font class="keyword"> const </font>{ 00218 assert(index < len);00219 <font class="keywordflow">return</font> data[index];00220 }00221 <a name="l00227"></a><a class="code" href="classdbArray.html#dbArraya10">00227</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya10">putat</a>(size_t index, T <font class="keyword">const</font>& value) { 00228 assert(index < len);00229 <font class="keywordflow">if</font> (!allocated) { 00230 T* copy = <font class="keyword">new</font> T[len];00231 memcpy(copy, data, len);00232 data = copy;00233 allocated = len;00234 }00235 data[index] = value;00236 }00237 00238 <a name="l00244"></a><a class="code" href="classdbArray.html#dbArraya11">00244</a> T <font class="keyword">const</font>& <a class="code" href="classdbArray.html#dbArraya11">getat</a>(size_t index)<font class="keyword"> const </font>{00245 assert(index < len);00246 <font class="keywordflow">return</font> data[index];00247 }00248 <a name="l00252"></a><a class="code" href="classdbArray.html#dbArraya12">00252</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya12">clear</a>() { 00253 <font class="keywordflow">if</font> (allocated) {00254 <font class="keyword">delete</font>[] data;00255 }00256 data = NULL;00257 len = 0;00258 allocated = 0;00259 }00260 <a name="l00265"></a><a class="code" href="classdbArray.html#dbArraya13">00265</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya13">resize</a>(size_t size) { 00266 <font class="keywordflow">if</font> (size > len && size > allocated) { 00267 T* p = <font class="keyword">new</font> T[size];00268 memcpy(p, data, len);00269 <font class="keywordflow">if</font> (allocated) { 00270 <font class="keyword">delete</font>[] data;00271 }00272 data = p;00273 allocated = size;00274 }00275 len = size;00276 }00277 <a name="l00282"></a><a class="code" href="classdbArray.html#dbArraya14">00282</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya14">append</a>(T <font class="keyword">const</font>& value) { 00283 <a class="code" href="classdbArray.html#dbArraya15">insert</a>(value, len);00284 }00285 <a name="l00291"></a><a class="code" href="classdbArray.html#dbArraya15">00291</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya15">insert</a>(T <font class="keyword">const</font>& value, size_t index = 0) { 00292 assert(index <= len);00293 <font class="keywordflow">if</font> (len >= allocated) {00294 size_t newSize = len == 0 ? 8 : len*2;00295 T* p = <font class="keyword">new</font> T[newSize];00296 memcpy(p, data, index);00297 p[index] = value;00298 memcpy(p+index+1, data+index, (len-index));00299 <font class="keywordflow">if</font> (allocated) { 00300 <font class="keyword">delete</font>[] data;00301 }00302 data = p;00303 allocated = newSize;00304 } <font class="keywordflow">else</font> { 00305 memmove(data+index+1, data+index, (len-index));00306 data[index] = value;00307 }00308 len += 1;00309 }00310 <a name="l00315"></a><a class="code" href="classdbArray.html#dbArraya16">00315</a> <font class="keywordtype">void</font> <a class="code" href="classdbArray.html#dbArraya16">remove</a>(size_t index) { 00316 assert(index < len);00317 len -= 1;00318 <font class="keywordflow">if</font> (index != len && !allocated) { 00319 T* p = <font class="keyword">new</font> T[len];00320 memcpy(p, data, index);00321 memcpy(p+index, data+index+1, (len-index));00322 allocated = len;00323 data = p;00324 } <font class="keywordflow">else</font> { 00325 memmove(data+index, data+index+1, (len-index));00326 }00327 }00328 <a name="l00333"></a><a class="code" href="classdbArray.html#dbArraya17">00333</a> T <font class="keyword">const</font>* <a class="code" href="classdbArray.html#dbArraya17">get</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> data; }00334 };00335 00336 00342 <font class="keyword">template</font><<font class="keyword">class</font> T>00343 <font class="keywordtype">int</font> index(<a class="code" href="classdbArray.html">dbArray<T></a> <font class="keyword">const</font>& a, T value) {00344 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> i = 0, n = a.<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a>(); i < n; i++) {00345 <font class="keywordflow">if</font> (a[i] == value) {00346 <font class="keywordflow">return</font> i;00347 }00348 }00349 <font class="keywordflow">return</font> -1;00350 }00351 00357 <font class="keyword">template</font><<font class="keyword">class</font> T>00358 <font class="keywordtype">int</font> rindex(<a class="code" href="classdbArray.html">dbArray<T></a> <font class="keyword">const</font>& a, T value) {00359 <font class="keywordtype">int</font> i = a.<a class="code" href="classdbAnyArray.html#dbArray_3_01dbReference_3_01Software_01_4_01_4a18">length</a>();00360 <font class="keywordflow">while</font> (--i >= 0 && a[i] != value);00361 <font class="keywordflow">return</font> i;00362 }00363 00364 00365 <font class="preprocessor">#endif</font>00366 <font class="preprocessor"></font></pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:28 2002 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?