Mercurial > octave-nkf
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 |