Mercurial > hg > octave-nkf
diff liboctave/dNDArray.cc @ 5073:e71be9c548f2
[project @ 2004-11-09 18:31:25 by jwe]
author | jwe |
---|---|
date | Tue, 09 Nov 2004 18:31:26 +0000 |
parents | 954cc2ba6a49 |
children | e35b034d3523 |
line wrap: on
line diff
--- a/liboctave/dNDArray.cc +++ b/liboctave/dNDArray.cc @@ -793,14 +793,58 @@ } NDArray -concat (const NDArray& ra, const NDArray& rb, const Array<int>& ra_idx) +NDArray::concat (const NDArray& rb, const Array<int>& ra_idx) { - NDArray retval (ra); + if (rb.numel () > 0) + insert (rb, ra_idx); + return *this; +} + +ComplexNDArray +NDArray::concat (const ComplexNDArray& rb, const Array<int>& ra_idx) +{ + ComplexNDArray retval (*this); if (rb.numel () > 0) retval.insert (rb, ra_idx); return retval; } +charNDArray +NDArray::concat (const charNDArray& rb, const Array<int>& ra_idx) +{ + charNDArray retval (dims ()); + int nel = numel (); + + for (int i = 0; i < nel; i++) + { + double d = elem (i); + + if (xisnan (d)) + { + (*current_liboctave_error_handler) + ("invalid conversion from NaN to character"); + return retval; + } + else + { + int ival = NINT (d); + + if (ival < 0 || ival > UCHAR_MAX) + // XXX FIXME XXX -- is there something + // better we could do? Should we warn the user? + ival = 0; + + retval.elem (i) = static_cast<char>(ival); + } + } + + if (rb.numel () == 0) + return retval; + + retval.insert (rb, ra_idx); + return retval; +} + NDArray real (const ComplexNDArray& a) {