# HG changeset patch # User jwe # Date 760686968 0 # Node ID a7fd0923e4e4eae4277329134776845c2582fee1 # Parent ecb6f1e1184255a25cbd5569456e2f994baf6f4c [project @ 1994-02-08 05:52:11 by jwe] diff -r ecb6f1e11842 -r a7fd0923e4e4 liboctave/Array.cc --- a/liboctave/Array.cc Tue Feb 08 03:24:39 1994 +0000 +++ b/liboctave/Array.cc Tue Feb 08 05:56:08 1994 +0000 @@ -831,6 +831,41 @@ return nc; } +#if defind (_AIX) +template +T& +DiagArray::elem (int r, int c) +{ + static T foo (0); + return (r == c) ? Array::elem (r) : foo; +} + +template +T& +DiagArray::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::elem (r) : foo; +} + +template +T& +DiagArray::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::elem (r) : foo; +} + template T& DiagArray::xelem (int r, int c) diff -r ecb6f1e11842 -r a7fd0923e4e4 liboctave/Array.h --- a/liboctave/Array.h Tue Feb 08 03:24:39 1994 +0000 +++ b/liboctave/Array.h Tue Feb 08 05:56:08 1994 +0000 @@ -227,6 +227,7 @@ template class DiagArray : public Array { +#if ! defined (_AIX) private: class Proxy @@ -276,6 +277,7 @@ }; friend class Proxy; +#endif protected: @@ -303,6 +305,11 @@ int cols (void) const; int columns (void) const; +#if defined (_AIX) + T& elem (int r, int c); + T& checkelem (int r, int c); + T& operator () (int r, int c); +#else Proxy elem (int r, int c) { return Proxy (this, r, c); @@ -329,6 +336,7 @@ else return Proxy (this, r, c); } +#endif // No checking. T& xelem (int r, int c); diff -r ecb6f1e11842 -r a7fd0923e4e4 src/pt-const.cc --- a/src/pt-const.cc Tue Feb 08 03:24:39 1994 +0000 +++ b/src/pt-const.cc Tue Feb 08 05:56:08 1994 +0000 @@ -611,7 +611,15 @@ i++; - assert (i > 0 && (nr <= 1 || nc <= 1)); + assert (i >= 0 && (nr <= 1 || nc <= 1)); + +// This function never reduces the size of a vector, and all vectors +// have dimensions of at least 0x0. If i is 0, it is either because +// a vector has been indexed with a vector of all zeros (in which case +// the index vector is empty and nothing will happen) or a vector has +// been indexed with 0 (an error which will be caught elsewhere). + if (i == 0) + return; if (nr <= 1 && nc <= 1 && i >= 1) {