Mercurial > hg > octave-nkf
comparison liboctave/idx-vector.cc @ 8379:ad8ed668e0a4
allow initialized local buffers
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Sat, 06 Dec 2008 09:15:44 +0100 |
parents | e3c9102431a9 |
children | a99b9113c58c |
comparison
equal
deleted
inserted
replaced
8378:7d0492aa522d | 8379:ad8ed668e0a4 |
---|---|
32 | 32 |
33 #include "idx-vector.h" | 33 #include "idx-vector.h" |
34 #include "Array.h" | 34 #include "Array.h" |
35 #include "Range.h" | 35 #include "Range.h" |
36 | 36 |
37 #include "oct-locbuf.h" | |
37 #include "lo-error.h" | 38 #include "lo-error.h" |
38 #include "lo-mappers.h" | 39 #include "lo-mappers.h" |
39 | 40 |
40 static void | 41 static void |
41 gripe_invalid_index (void) | 42 gripe_invalid_index (void) |
500 } | 501 } |
501 | 502 |
502 idx_vector | 503 idx_vector |
503 idx_vector::complement (octave_idx_type n) const | 504 idx_vector::complement (octave_idx_type n) const |
504 { | 505 { |
505 | 506 OCTAVE_LOCAL_BUFFER_INIT (bool, left, n, true); |
506 bool *left = new bool[n]; | |
507 | |
508 std::fill (left, left + n, true); | |
509 | 507 |
510 octave_idx_type cnt = n; | 508 octave_idx_type cnt = n; |
511 | 509 |
512 for (octave_idx_type i = 0, len = length (); i < len; i++) | 510 for (octave_idx_type i = 0, len = length (); i < len; i++) |
513 { | 511 { |
520 } | 518 } |
521 | 519 |
522 octave_idx_type len = cnt, *data = new octave_idx_type[len]; | 520 octave_idx_type len = cnt, *data = new octave_idx_type[len]; |
523 for (octave_idx_type i = 0, j = 0; i < n; i++) | 521 for (octave_idx_type i = 0, j = 0; i < n; i++) |
524 if (left[i]) data[j++] = i; | 522 if (left[i]) data[j++] = i; |
525 | |
526 delete [] left; | |
527 | 523 |
528 return new idx_vector_rep (data, len, | 524 return new idx_vector_rep (data, len, |
529 len ? data[len-1]+1 : 0, | 525 len ? data[len-1]+1 : 0, |
530 dim_vector (1, len), DIRECT); | 526 dim_vector (1, len), DIRECT); |
531 } | 527 } |
537 | 533 |
538 if (is_colon_equiv (n)) | 534 if (is_colon_equiv (n)) |
539 retval = true; | 535 retval = true; |
540 else if (length (n) == n && extent(n) == n) | 536 else if (length (n) == n && extent(n) == n) |
541 { | 537 { |
542 bool *left = new bool[n]; | 538 OCTAVE_LOCAL_BUFFER_INIT (bool, left, n, true); |
543 | |
544 std::fill (left, left + n, true); | |
545 | 539 |
546 retval = true; | 540 retval = true; |
547 | 541 |
548 for (octave_idx_type i = 0, len = length (); i < len; i++) | 542 for (octave_idx_type i = 0, len = length (); i < len; i++) |
549 { | 543 { |
555 retval = false; | 549 retval = false; |
556 break; | 550 break; |
557 } | 551 } |
558 } | 552 } |
559 | 553 |
560 delete [] left; | |
561 } | 554 } |
562 | 555 |
563 return retval; | 556 return retval; |
564 } | 557 } |
565 | 558 |