📄 array_8h-source.html
字号:
00190
<a name="l00195"></a><a class="code" href="classdbArray.html#dbArraya7">00195</a> T <span class="keyword">const</span>& <a class="code" href="classdbArray.html#dbArraya7">last</a>() {
00196 assert(len > 0);
00197 <span class="keywordflow">return</span> data[len-1];
00198 }
00199
<a name="l00207"></a><a class="code" href="classdbArray.html#dbArraya8">00207</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya8">assign</a>(T <span class="keyword">const</span>* ptr, size_t size, <span class="keywordtype">bool</span> copy = <span class="keyword">true</span>) {
00208 <span class="keywordflow">if</span> (allocated) {
00209 <span class="keyword">delete</span>[] data;
00210 }
00211 len = size;
00212 <span class="keywordflow">if</span> (copy && size != 0) {
00213 data = <span class="keyword">new</span> T[size];
00214 memcpy(data, ptr, size);
00215 allocated = size;
00216 } <span class="keywordflow">else</span> {
00217 data = (T*)ptr;
00218 allocated = 0;
00219 }
00220 }
00221
<a name="l00227"></a><a class="code" href="classdbArray.html#dbArraya9">00227</a> T <span class="keyword">const</span>& <a class="code" href="classdbArray.html#dbArraya9">operator []</a>(size_t index)<span class="keyword"> const </span>{
00228 assert(index < len);
00229 <span class="keywordflow">return</span> data[index];
00230 }
00231
<a name="l00237"></a><a class="code" href="classdbArray.html#dbArraya10">00237</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya10">putat</a>(size_t index, T <span class="keyword">const</span>& value) {
00238 assert(index < len);
00239 <span class="keywordflow">if</span> (!allocated) {
00240 T* copy = <span class="keyword">new</span> T[len];
00241 memcpy(copy, data, len);
00242 data = copy;
00243 allocated = len;
00244 }
00245 data[index] = value;
00246 }
00247
00248
<a name="l00254"></a><a class="code" href="classdbArray.html#dbArraya11">00254</a> T <span class="keyword">const</span>& <a class="code" href="classdbArray.html#dbArraya11">getat</a>(size_t index)<span class="keyword"> const </span>{
00255 assert(index < len);
00256 <span class="keywordflow">return</span> data[index];
00257 }
00258
<a name="l00262"></a><a class="code" href="classdbArray.html#dbArraya12">00262</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya12">clear</a>() {
00263 <span class="keywordflow">if</span> (allocated) {
00264 <span class="keyword">delete</span>[] data;
00265 }
00266 data = NULL;
00267 len = 0;
00268 allocated = 0;
00269 }
00270
<a name="l00275"></a><a class="code" href="classdbArray.html#dbArraya13">00275</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya13">resize</a>(size_t size) {
00276 <span class="keywordflow">if</span> (size > len && size > allocated) {
00277 T* p = <span class="keyword">new</span> T[size];
00278 memcpy(p, data, len);
00279 <span class="keywordflow">if</span> (allocated) {
00280 <span class="keyword">delete</span>[] data;
00281 }
00282 data = p;
00283 allocated = size;
00284 }
00285 len = size;
00286 }
00287
<a name="l00292"></a><a class="code" href="classdbArray.html#dbArraya14">00292</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya14">append</a>(T <span class="keyword">const</span>& value) {
00293 <a class="code" href="classdbArray.html#dbArraya16">insert</a>(value, len);
00294 }
00295
<a name="l00303"></a><a class="code" href="classdbArray.html#dbArraya15">00303</a> <span class="keywordtype">int</span> <a class="code" href="classdbArray.html#dbArraya15">bsearch</a>(T value) {
00304 size_t l = 0, r = len;
00305 <span class="keywordflow">while</span> (l < r) {
00306 size_t m = (l + 1) >> 1;
00307 <span class="keywordflow">if</span> (data[m] < value) {
00308 l = m + 1;
00309 } <span class="keywordflow">else</span> {
00310 r = m;
00311 }
00312 }
00313 <span class="keywordflow">return</span> r;
00314 }
00315
<a name="l00321"></a><a class="code" href="classdbArray.html#dbArraya16">00321</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya16">insert</a>(T <span class="keyword">const</span>& value, size_t index = 0) {
00322 assert(index <= len);
00323 <span class="keywordflow">if</span> (len >= allocated) {
00324 size_t newSize = len == 0 ? 8 : len*2;
00325 T* p = <span class="keyword">new</span> T[newSize];
00326 memcpy(p, data, index);
00327 p[index] = value;
00328 memcpy(p+index+1, data+index, (len-index));
00329 <span class="keywordflow">if</span> (allocated) {
00330 <span class="keyword">delete</span>[] data;
00331 }
00332 data = p;
00333 allocated = newSize;
00334 } <span class="keywordflow">else</span> {
00335 memmove(data+index+1, data+index, (len-index));
00336 data[index] = value;
00337 }
00338 len += 1;
00339 }
00340
<a name="l00345"></a><a class="code" href="classdbArray.html#dbArraya17">00345</a> <span class="keywordtype">void</span> <a class="code" href="classdbArray.html#dbArraya17">remove</a>(size_t index) {
00346 assert(index < len);
00347 len -= 1;
00348 <span class="keywordflow">if</span> (index != len && !allocated) {
00349 T* p = <span class="keyword">new</span> T[len];
00350 memcpy(p, data, index);
00351 memcpy(p+index, data+index+1, (len-index));
00352 allocated = len;
00353 data = p;
00354 } <span class="keywordflow">else</span> {
00355 memmove(data+index, data+index+1, (len-index));
00356 }
00357 }
00358
<a name="l00363"></a><a class="code" href="classdbArray.html#dbArraya18">00363</a> T <span class="keyword">const</span>* <a class="code" href="classdbArray.html#dbArraya18">get</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data; }
00364
<a name="l00369"></a><a class="code" href="classdbArray.html#dbArraya19">00369</a> T* <a class="code" href="classdbArray.html#dbArraya19">update</a>() {
00370 <span class="keywordflow">if</span> (!allocated) {
00371 T* copy = <span class="keyword">new</span> T[len];
00372 memcpy(copy, data, len);
00373 data = copy;
00374 allocated = len;
00375 }
00376 <span class="keywordflow">return</span> data;
00377 }
00378 };
00379
00385 <span class="keyword">template</span><<span class="keyword">class</span> T>
00386 <span class="keywordtype">int</span> index(<a class="code" href="classdbArray.html">dbArray<T></a> <span class="keyword">const</span>& a, T value) {
00387 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, n = a.<a class="code" href="classdbAnyArray.html#dbArraya20">length</a>(); i < n; i++) {
00388 <span class="keywordflow">if</span> (a[i] == value) {
00389 <span class="keywordflow">return</span> i;
00390 }
00391 }
00392 <span class="keywordflow">return</span> -1;
00393 }
00394
00400 <span class="keyword">template</span><<span class="keyword">class</span> T>
00401 <span class="keywordtype">int</span> rindex(<a class="code" href="classdbArray.html">dbArray<T></a> <span class="keyword">const</span>& a, T value) {
00402 <span class="keywordtype">int</span> i = a.<a class="code" href="classdbAnyArray.html#dbArraya20">length</a>();
00403 <span class="keywordflow">while</span> (--i >= 0 && a[i] != value);
00404 <span class="keywordflow">return</span> i;
00405 }
00406
00407 END_FASTDB_NAMESPACE
00408
00409 <span class="preprocessor">#endif</span>
00410 <span class="preprocessor"></span>
</pre></div><hr><address style="align: right;"><small>Generated on Thu Feb 14 12:42:30 2008 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.18 </small></address>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -