comparison liboctave/Array.h @ 14616:13cc11418393

improve handling of default resize fill value for arrays * Array.cc (Array<T>::resize_fill_value): Return T, not const T&. * Array.h (Array<T>::resize_fill_value): Now virtual member function instead of static. (Array<T>::resize1 (octave_idx_type)): New function. (Array<T>::resize1 (octave_idx_type, const T&)): Eliminate default value for second arg. (Array<T>::resize (octave_idx_type, octave_idx_type)): New function. (Array<T>::resize (octave_idx_type, octave_idx_type, const T&)): Eliminate default value for third arg. (Array<T>::resize (const dim_vector&)): New function. (Array<T>::resize (const dim_vector&, const T&)): New function. (Array<T>::resize2 (octave_idx_type, octave_idx_type)): New function. (Array<T>::resize2 (octave_idx_type, octave_idx_type, const T&)): Eliminate default value for third arg. (Array<T>::index (const idx_vector&, bool) const): New function. (Array<T>::index (const idx_vector&, bool, const T&) const): Eliminate default value for third arg. (Array<T>::index (const idx_vector&, const idx_vector&, bool) const): New function. (Array<T>::index (const idx_vector&, const idx_vector&, bool, const T&) const): Eliminate default value for third arg. (Array<T>::index (const Array<idx_vector>&, bool) const): New function. (Array<T>::index (const Array<idx_vector>&, const T&) const): Eliminate default value for third arg. (Array<T>::assign (const idx_vector&, const Array<T>&)): New function. (Array<T>::assign (const idx_vector&, const Array<T>&, const T&)): Eliminate default value for third arg. (Array<T>::assign (const idx_vector&, const idx_vector&, const Array<T>&)): New function. (Array<T>::assign (const idx_vector&, const idx_vector&, const Array<T>&, const T&)): Eliminate default value for third arg. (Array<T>::assign (const Array<idx_vector>&, const Array<T>&)): New function. (Array<T>::assign (const Array<idx_vector>&, const Array<T>&, const T&)): Eliminate default value for third arg. * DiagArray2.h (DiagArray2<T>::resize (octave_idx_type, octave_idx_type)): New function. (DiagArray2<T>::resize (octave_idx_type, octave_idx_type, const T&)): Eliminate default value for third arg. * CColVector.h (ComplexColumnVector::resize): Use Complex (0) as default value instead of Array<Complex>::resize_fill_value (). * CMatrix.h (ComplexMatrix::resize): Use Complex (0) as default value instead of Array<Complex>::resize_fill_value (). (ComplexMatrix::resize_fill_value): Delete. * CNDArray.h (ComplexNDArray::resize_fill_value): Delete. * CRowVector.h (ComplexRowVector::resize): Use Complex (0) as default value instead of Array<Complex>::resize_fill_value (). * boolMatrix.h (boolMatrix::resize): Use false as default value instead of resize_fill_value (). (boolMatrix::resize_fill_value): Delete. * boolNDArray.h (boolNDArray::resize_fill_value): Delete. * chMatrix.h (charMatrix::resize): Use 0 as default value instead of resize_fill_value. (charMatrix::resize_fill_value): Delete. * chNDArray.h (charNDArray::resize_fill_value): Delete. * dColVector.h (ColumnVector::resize): Use 0 as default value instead of Array<double>::resize_fill_value (). * dMatrix.h (Matrix::resize): Use 0 as default value instead of resize_fill_value (). (Matrix::resize_fill_value): Delete. * dNDArray.h (NDArray::resize_fill_value): Delete. * dRowVector.h (RowVector::resize): Use 0 as default value instead of Array<double>::resize_fill_value (). * fCColVector.h (FloatComplexColumnVector::resize): Use FloatComplex (0) as default value instead of Array<FloatComplex>::resize_fill_value (). * fCMatrix.h (FloatComplexMatrix::resize): Use FloatComplex (0) as default value instead of resize_fill_value ()). FloatCmplexMatrix::resize_fill_value): Delete. * fCNDArray.h (FloatComplexNDArray::resize_fill_value): Delete. * fCRowVector.h (FloatComplexRowVector::resize): Use FloatComplex (0) as default value instead of Array<FloatComplex>::resize_fill_value (). * fColVector.h (FloatColumnVector::resize): Use 0 as default value instead of Array<float>::resize_fill_value (). * fMatrix.h (FloatMatrix::resize): Use 0 as default value instead of resize_fill_value (). * fMatrix.h (FloatMatrix::resize_fill_value): Delete. * fNDArray.h (FloatNDArray::resize_fill_value): Delete. * fRowVector.h (FloatRowVector::resize): Use 0 as default value instead of Array<float>::resize_fill_value (). * intNDArray.h (intNDArray<T>::resize_fill_value): Delete. * str-vec.h (string_vector::resize): Use std::string as default value instead of resize_fill_value (). * Cell.cc, Cell.h (Cell::Cell, Cell::assign, Cell::index): Use Matrix () as default value instead of resize_fill_value (). (Cell::resize_fill_value): No longer static. * oct-map.cc (octave_map::resize, octave_map::assign, Octave_map::resize, Octave_map::assign): Use Matrix () as default value instead of Cell::resize_fill_value. * oct-obj.h (octave_value_list::resize): Use octave_value () instead of Array<octave_value>::resize_fill_value (). * ov-complex.cc (octave_complex::resize): Use Complex (0) for fill value instead of ComplexNDArray::resize_fill_value (). * ov-float.cc (octave_float_scalar::resize): Use 0 for fill value instead of NDArray::resize_fill_value (). * ov-flt-complex.cc (octave_float_complex_scalar::resize): Use Complex (0) for fill value instead of ComplexNDArray::resize_fill_value (). * ov-range.cc (octave_range::resize): Use 0 for fill value instead of NDArray::resize_fill_value (). * ov-scalar.cc (octave_scalar::resize): Use 0 for fill value instead of NDArray::resize_fill_value (). * ov-str-mat.cc (octave_char_matrix_str::resize): Use 0 for fill value instead of charNDArray::resize_fill_value ().
author John W. Eaton <jwe@octave.org>
date Thu, 10 May 2012 16:31:02 -0400
parents e8e86ae3abbc
children 460a3c6d8bf1 4c9fd3e31436
comparison
equal deleted inserted replaced
14615:88e67d58b06b 14616:13cc11418393
448 448
449 Array<T> index (const idx_vector& i, const idx_vector& j) const; 449 Array<T> index (const idx_vector& i, const idx_vector& j) const;
450 450
451 Array<T> index (const Array<idx_vector>& ia) const; 451 Array<T> index (const Array<idx_vector>& ia) const;
452 452
453 static const T& resize_fill_value (); 453 virtual T resize_fill_value (void) const;
454 454
455 // Resizing (with fill). 455 // Resizing (with fill).
456 456
457 void resize1 (octave_idx_type n, const T& rfv = resize_fill_value ()); 457 void resize1 (octave_idx_type n, const T& rfv);
458 458 void resize1 (octave_idx_type n) { resize1 (n, resize_fill_value ()); }
459 void resize (octave_idx_type n) GCC_ATTR_DEPRECATED 459
460 { resize1 (n); } 460 void resize (octave_idx_type n) GCC_ATTR_DEPRECATED { resize1 (n); }
461 461
462 void resize (octave_idx_type nr, octave_idx_type nc, 462 void resize (octave_idx_type nr, octave_idx_type nc, const T& rfv) GCC_ATTR_DEPRECATED
463 const T& rfv = resize_fill_value ()) GCC_ATTR_DEPRECATED
464 { 463 {
465 resize2 (nr, nc, rfv); 464 resize2 (nr, nc, rfv);
466 } 465 }
467 466
468 void resize (const dim_vector& dv, const T& rfv = resize_fill_value ()); 467 void resize (octave_idx_type nr, octave_idx_type nc) GCC_ATTR_DEPRECATED
468 {
469 resize2 (nr, nc, resize_fill_value ());
470 }
471
472 void resize (const dim_vector& dv, const T& rfv);
473 void resize (const dim_vector& dv) { resize (dv, resize_fill_value ()); }
469 474
470 // Indexing with possible resizing and fill 475 // Indexing with possible resizing and fill
471 // FIXME -- this is really a corner case, that should better be 476 // FIXME -- this is really a corner case, that should better be
472 // handled directly in liboctinterp. 477 // handled directly in liboctinterp.
473 478
474 Array<T> index (const idx_vector& i, bool resize_ok, 479 Array<T> index (const idx_vector& i, bool resize_ok, const T& rfv) const;
475 const T& rfv = resize_fill_value ()) const; 480 Array<T> index (const idx_vector& i, bool resize_ok) const
476 481 {
477 Array<T> index (const idx_vector& i, const idx_vector& j, 482 return index (i, resize_ok, resize_fill_value ());
478 bool resize_ok, const T& rfv = resize_fill_value ()) const; 483 }
479 484
480 Array<T> index (const Array<idx_vector>& ia, 485 Array<T> index (const idx_vector& i, const idx_vector& j, bool resize_ok, const T& rfv) const;
481 bool resize_ok, const T& rfv = resize_fill_value ()) const; 486 Array<T> index (const idx_vector& i, const idx_vector& j, bool resize_ok) const
487 {
488 return index (i, j, resize_ok, resize_fill_value ());
489 }
490
491 Array<T> index (const Array<idx_vector>& ia, bool resize_ok, const T& rfv) const;
492 Array<T> index (const Array<idx_vector>& ia, bool resize_ok) const
493 {
494 return index (ia, resize_ok, resize_fill_value ());
495 }
482 496
483 // Indexed assignment (always with resize & fill). 497 // Indexed assignment (always with resize & fill).
484 498
485 void assign (const idx_vector& i, const Array<T>& rhs, 499 void assign (const idx_vector& i, const Array<T>& rhs, const T& rfv);
486 const T& rfv = resize_fill_value ()); 500 void assign (const idx_vector& i, const Array<T>& rhs)
487 501 {
488 void assign (const idx_vector& i, const idx_vector& j, const Array<T>& rhs, 502 assign (i, rhs, resize_fill_value ());
489 const T& rfv = resize_fill_value ()); 503 }
490 504
491 void assign (const Array<idx_vector>& ia, const Array<T>& rhs, 505 void assign (const idx_vector& i, const idx_vector& j, const Array<T>& rhs, const T& rfv);
492 const T& rfv = resize_fill_value ()); 506 void assign (const idx_vector& i, const idx_vector& j, const Array<T>& rhs)
507 {
508 assign (i, j, rhs, resize_fill_value ());
509 }
510
511 void assign (const Array<idx_vector>& ia, const Array<T>& rhs, const T& rfv);
512 void assign (const Array<idx_vector>& ia, const Array<T>& rhs)
513 {
514 assign (ia, rhs, resize_fill_value ());
515 }
493 516
494 // Deleting elements. 517 // Deleting elements.
495 518
496 // A(I) = [] (with a single subscript) 519 // A(I) = [] (with a single subscript)
497 void delete_elements (const idx_vector& i); 520 void delete_elements (const idx_vector& i);
670 // supposedly equal dimensions (e.g. structs in the interpreter). 693 // supposedly equal dimensions (e.g. structs in the interpreter).
671 bool optimize_dimensions (const dim_vector& dv); 694 bool optimize_dimensions (const dim_vector& dv);
672 695
673 private: 696 private:
674 697
675 void resize2 (octave_idx_type nr, octave_idx_type nc, 698 void resize2 (octave_idx_type nr, octave_idx_type nc, const T& rfv);
676 const T& rfv = resize_fill_value ()); 699 void resize2 (octave_idx_type nr, octave_idx_type nc)
700 {
701 resize2 (nr, nc, resize_fill_value ());
702 }
677 703
678 static void instantiation_guard (); 704 static void instantiation_guard ();
679 }; 705 };
680 706
681 // This is a simple wrapper template that will subclass an Array<T> type or any 707 // This is a simple wrapper template that will subclass an Array<T> type or any