Mercurial > hg > octave-nkf
diff liboctave/Array3.h @ 4513:508238e65af7
[project @ 2003-09-19 21:40:57 by jwe]
author | jwe |
---|---|
date | Fri, 19 Sep 2003 21:41:21 +0000 |
parents | af308ca1a354 |
children | bd2067547b40 |
line wrap: on
line diff
--- a/liboctave/Array3.h +++ b/liboctave/Array3.h @@ -31,7 +31,7 @@ #include <cassert> #include <cstdlib> -#include "Array2.h" +#include "Array.h" #include "lo-error.h" class idx_vector; @@ -40,133 +40,50 @@ template <class T> class -Array3 : public Array2<T> +Array3 : public Array<T> { protected: - int d3; + static int get_size (int r, int c, int p) + { return Array<T>::get_size (r, c, p); } - Array3 (T *d, int n, int m, int k) : Array2<T> (d, n, get_size (m, k)) - { - Array2<T>::d2 = m; - d3 = k; - set_max_indices (3); - } + Array3 (T *d, int r, int c, int p) : Array<T> (d, dim_vector (r, c, p)) { } public: - Array3 (void) : Array2<T> () - { - Array2<T>::d2 = 0; - d3 = 0; - set_max_indices (3); - } + Array3 (void) : Array<T> (dim_vector (0, 0, 0)) { } - Array3 (int n, int m, int k) : Array2<T> (n, get_size (m, k)) - { - Array2<T>::d2 = m; - d3 = k; - set_max_indices (3); - } + Array3 (int r, int c, int p) : Array<T> (dim_vector (r, c, p)) { } - Array3 (int n, int m, int k, const T& val) : Array2<T> (n, m*k, val) - { - Array2<T>::d2 = m; - d3 = k; - set_max_indices (3); - } + Array3 (int r, int c, int p, const T& val) + : Array<T> (dim_vector (r, c, p), val) { } - Array3 (const Array3<T>& a) : Array2<T> (a) - { - Array2<T>::d2 = a.d2; - d3 = a.d3; - set_max_indices (3); - } + Array3 (const Array3<T>& a) + : Array<T> (a, a.dims ()) { } + + Array3 (const Array<T>& a, int r, int c, int p) + : Array<T> (a, dim_vector (r, c, p)) { } ~Array3 (void) { } Array3<T>& operator = (const Array3<T>& a) { - if (this != &a && Array<T>::rep != a.rep) + if (this != &a) { Array<T>::operator = (a); - Array2<T>::d1 = a.d1; - Array2<T>::d2 = a.d2; - d3 = a.d3; + + dimensions = a.dimensions; } return *this; } - int dim3 (void) const { return d3; } - - // No checking of any kind, ever. - - T& xelem (int i, int j, int k) { return Array2<T>::xelem (i, Array2<T>::d2*k+j); } - T xelem (int i, int j, int k) const { return Array2<T>::xelem (i, Array2<T>::d2*k+j); } - - // Note that the following element selection methods don't use - // xelem() because they need to make use of the code in - // Array<T>::elem() that checks the reference count. - - T& checkelem (int i, int j, int k) - { - if (i < 0 || j < 0 || k < 0 || i >= Array2<T>::d1 || j >= Array2<T>::d2 || k >= d3) - { - (*current_liboctave_error_handler) ("range error in Array3"); - static T foo; - return foo; - } - return Array2<T>::elem (i, Array2<T>::d2*k+j); - } - - T& elem (int i, int j, int k) { return Array2<T>::elem (i, Array2<T>::d2*k+j); } - -#if defined (BOUNDS_CHECKING) - T& operator () (int i, int j, int k) { return checkelem (i, j, k); } -#else - T& operator () (int i, int j, int k) { return elem (i, j, k); } -#endif + void resize (int r, int c, int p) { resize_no_fill (r, c, p); } - T checkelem (int i, int j, int k) const - { - if (i < 0 || j < 0 || k < 0 || i >= Array2<T>::d1 || j >= Array2<T>::d2 || k >= d3) - { - (*current_liboctave_error_handler) ("range error in Array3"); - return T (); - } - return Array2<T>::elem (i, Array2<T>::d1*k+j); - } - - T elem (int i, int j, int k) const { return Array2<T>::elem (i, Array2<T>::d2*k+j); } - -#if defined (BOUNDS_CHECKING) - T operator () (int i, int j, int k) const { return checkelem (i, j, k); } -#else - T operator () (int i, int j, int k) const { return elem (i, j, k); } -#endif - - void resize (int n, int m, int k); - void resize (int n, int m, int k, const T& val); - -#ifdef HEAVYWEIGHT_INDEXING - void maybe_delete_elements (idx_vector& i, idx_vector& j, idx_vector& k); - - Array3<T> value (void); -#endif + void resize (int r, int c, int p, const T& val) + { resize_and_fill (r, c, p, val); } }; -template <class LT, class RT> -int -assign (Array3<LT>& lhs, const Array3<RT>& rhs, const LT& rfv); - -template <class LT, class RT> -int -assign (Array3<LT>& lhs, const Array3<RT>& rhs) -{ - return assign (lhs, rhs, static_cast<LT> (0)); -} - #endif /*