Mercurial > hg > octave-nkf
diff liboctave/Array.cc @ 1989:a4b0826e240c
[project @ 1996-03-02 00:33:22 by jwe]
author | jwe |
---|---|
date | Sat, 02 Mar 1996 00:34:12 +0000 |
parents | 1281a23a34dd |
children | 1b57120c997b |
line wrap: on
line diff
--- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -211,383 +211,6 @@ return rep->data; } -// Two dimensional array class. - -template <class T> -T& -Array2<T>::checkelem (int i, int j) -{ - if (i < 0 || j < 0 || i >= d1 || j >= d2) - { - (*current_liboctave_error_handler) ("range error"); - static T foo; - return foo; - } - return Array<T>::elem (d1*j+i); -} - -template <class T> -T -Array2<T>::elem (int i, int j) const -{ - return Array<T>::elem (d1*j+i); -} - -template <class T> -T -Array2<T>::checkelem (int i, int j) const -{ - if (i < 0 || j < 0 || i >= d1 || j >= d2) - { - (*current_liboctave_error_handler) ("range error"); - T foo; - static T *bar = &foo; - return foo; - } - return Array<T>::elem (d1*j+i); -} - -template <class T> -T -Array2<T>::operator () (int i, int j) const -{ - if (i < 0 || j < 0 || i >= d1 || j >= d2) - { - (*current_liboctave_error_handler) ("range error"); - T foo; - static T *bar = &foo; - return foo; - } - return Array<T>::elem (d1*j+i); -} - -template <class T> -void -Array2<T>::resize (int r, int c) -{ - if (r < 0 || c < 0) - { - (*current_liboctave_error_handler) ("can't resize to negative dimension"); - return; - } - - if (r == dim1 () && c == dim2 ()) - return; - - ArrayRep *old_rep = rep; - const T *old_data = data (); - - int old_d1 = dim1 (); - int old_d2 = dim2 (); - int old_len = length (); - - rep = new ArrayRep (r*c); - - d1 = r; - d2 = c; - - if (old_data && old_len > 0) - { - int min_r = old_d1 < r ? old_d1 : r; - int min_c = old_d2 < c ? old_d2 : c; - - for (int j = 0; j < min_c; j++) - for (int i = 0; i < min_r; i++) - xelem (i, j) = old_data[old_d1*j+i]; - } - - if (--old_rep->count <= 0) - delete old_rep; -} - -template <class T> -void -Array2<T>::resize (int r, int c, const T& val) -{ - if (r < 0 || c < 0) - { - (*current_liboctave_error_handler) ("can't resize to negative dimension"); - return; - } - - if (r == dim1 () && c == dim2 ()) - return; - - ArrayRep *old_rep = rep; - const T *old_data = data (); - int old_d1 = dim1 (); - int old_d2 = dim2 (); - int old_len = length (); - - rep = new ArrayRep (r*c); - - d1 = r; - d2 = c; - - int min_r = old_d1 < r ? old_d1 : r; - int min_c = old_d2 < c ? old_d2 : c; - - if (old_data && old_len > 0) - { - for (int j = 0; j < min_c; j++) - for (int i = 0; i < min_r; i++) - xelem (i, j) = old_data[old_d1*j+i]; - } - - for (int j = 0; j < min_c; j++) - for (int i = min_r; i < r; i++) - xelem (i, j) = val; - - for (int j = min_c; j < c; j++) - for (int i = 0; i < r; i++) - xelem (i, j) = val; - - if (--old_rep->count <= 0) - delete old_rep; -} - -template <class T> -Array2<T>& -Array2<T>::insert (const Array2<T>& a, int r, int c) -{ - int a_rows = a.rows (); - int a_cols = a.cols (); - - if (r < 0 || r + a_rows > rows () || c < 0 || c + a_cols > cols ()) - { - (*current_liboctave_error_handler) ("range error for insert"); - return *this; - } - - for (int j = 0; j < a_cols; j++) - for (int i = 0; i < a_rows; i++) - elem (r+i, c+j) = a.elem (i, j); - - return *this; -} - -// Three dimensional array class. - -template <class T> -T& -Array3<T>::checkelem (int i, int j, int k) -{ - if (i < 0 || j < 0 || k < 0 || i >= d1 || j >= d2 || k >= d3) - { - (*current_liboctave_error_handler) ("range error"); - static T foo; - return foo; - } - return Array2<T>::elem (i, d1*k+j); -} - -template <class T> -T -Array3<T>::elem (int i, int j, int k) const -{ - return Array2<T>::elem (i, d2*k+j); -} - -template <class T> -T -Array3<T>::checkelem (int i, int j, int k) const -{ - if (i < 0 || j < 0 || k < 0 || i >= d1 || j >= d2 || k >= d3) - { - (*current_liboctave_error_handler) ("range error"); - T foo; - static T *bar = &foo; - return foo; - } - return Array2<T>::elem (i, d1*k+j); -} - -template <class T> -T -Array3<T>::operator () (int i, int j, int k) const -{ - if (i < 0 || j < 0 || k < 0 || i >= d1 || j >= d2 || k >= d3) - { - (*current_liboctave_error_handler) ("range error"); - T foo; - static T *bar = &foo; - return foo; - } - return Array2<T>::elem (i, d2*k+j); -} - -template <class T> -void -Array3<T>::resize (int n, int m, int k) -{ - assert (0); // XXX FIXME XXX -} - -template <class T> -void -Array3<T>::resize (int n, int m, int k, const T& val) -{ - assert (0); // XXX FIXME XXX -} - -// A two-dimensional array with diagonal elements only. - -#ifndef NO_DIAG_ARRAY -#if 1 -template <class T> -T& -DiagArray<T>::elem (int r, int c) -{ - static T foo (0); - return (r == c) ? Array<T>::elem (r) : foo; -} - -template <class T> -T& -DiagArray<T>::checkelem (int r, int c) -{ - static T foo (0); - if (r < 0 || c < 0 || r >= nr || c >= nc) - { - (*current_liboctave_error_handler) ("range error"); - return foo; - } - return (r == c) ? Array<T>::elem (r) : foo; -} - -template <class T> -T& -DiagArray<T>::operator () (int r, int c) -{ - static T foo (0); - if (r < 0 || c < 0 || r >= nr || c >= nc) - { - (*current_liboctave_error_handler) ("range error"); - return foo; - } - return (r == c) ? Array<T>::elem (r) : foo; -} -#endif - -template <class T> -T& -DiagArray<T>::xelem (int r, int c) -{ - static T foo (0); - return (r == c) ? Array<T>::xelem (r) : foo; -} - -template <class T> -T -DiagArray<T>::elem (int r, int c) const -{ - return (r == c) ? Array<T>::elem (r) : T (0); -} - -template <class T> -T -DiagArray<T>::checkelem (int r, int c) const -{ - if (r < 0 || c < 0 || r >= nr || c >= nc) - { - (*current_liboctave_error_handler) ("range error"); - T foo; - static T *bar = &foo; - return foo; - } - return (r == c) ? Array<T>::elem (r) : T (0); -} - -template <class T> -T -DiagArray<T>::operator () (int r, int c) const -{ - if (r < 0 || c < 0 || r >= nr || c >= nc) - { - (*current_liboctave_error_handler) ("range error"); - T foo; - static T *bar = &foo; - return foo; - } - return (r == c) ? Array<T>::elem (r) : T (0); -} - -template <class T> -void -DiagArray<T>::resize (int r, int c) -{ - if (r < 0 || c < 0) - { - (*current_liboctave_error_handler) ("can't resize to negative dimensions"); - return; - } - - if (r == dim1 () && c == dim2 ()) - return; - - ArrayRep *old_rep = rep; - const T *old_data = data (); - int old_len = length (); - - int new_len = r < c ? r : c; - - rep = new ArrayRep (new_len); - - nr = r; - nc = c; - - if (old_data && old_len > 0) - { - int min_len = old_len < new_len ? old_len : new_len; - - for (int i = 0; i < min_len; i++) - xelem (i, i) = old_data[i]; - } - - if (--old_rep->count <= 0) - delete old_rep; -} - -template <class T> -void -DiagArray<T>::resize (int r, int c, const T& val) -{ - if (r < 0 || c < 0) - { - (*current_liboctave_error_handler) ("can't resize to negative dimensions"); - return; - } - - if (r == dim1 () && c == dim2 ()) - return; - - ArrayRep *old_rep = rep; - const T *old_data = data (); - int old_len = length (); - - int new_len = r < c ? r : c; - - rep = new ArrayRep (new_len); - - nr = r; - nc = c; - - int min_len = old_len < new_len ? old_len : new_len; - - if (old_data && old_len > 0) - { - for (int i = 0; i < min_len; i++) - xelem (i, i) = old_data[i]; - } - - for (int i = min_len; i < new_len; i++) - xelem (i, i) = val; - - if (--old_rep->count <= 0) - delete old_rep; -} -#endif - /* ;;; Local Variables: *** ;;; mode: C++ ***