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