Mercurial > hg > octave-lyh
diff liboctave/chNDArray.cc @ 4915:c638c144d4da
[project @ 2004-07-23 19:01:22 by jwe]
author | jwe |
---|---|
date | Fri, 23 Jul 2004 19:01:23 +0000 |
parents | d3bd9c04147f |
children | 954cc2ba6a49 |
line wrap: on
line diff
--- a/liboctave/chNDArray.cc +++ b/liboctave/chNDArray.cc @@ -33,6 +33,7 @@ #include "chNDArray.h" #include "mx-base.h" #include "lo-ieee.h" +#include "lo-mappers.h" // XXX FIXME XXX -- this is not quite the right thing. @@ -48,10 +49,97 @@ MX_ND_ANY_ALL_REDUCTION (MX_ND_ANY_EVAL (elem (iter_idx) != ' '), false); } -int -charNDArray::cat (const charNDArray& ra_arg, int dim, int iidx, int move) +charNDArray +concat (const charNDArray& ra, const charNDArray& rb, const Array<int>& ra_idx) +{ + charNDArray retval (ra); + if (ra.numel () > 0) + retval.insert (rb, ra_idx); + return retval; +} + +charNDArray +concat (const charNDArray& ra, const NDArray& rb, const Array<int>& ra_idx) { - return ::cat_ra(*this, ra_arg, dim, iidx, move); + charNDArray retval (ra); + charNDArray tmp (rb.dims ()); + int nel = rb.numel (); + + if (ra.numel () == 0) + return retval; + + for (int i = 0; i < nel; i++) + { + double d = rb.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; + + tmp.elem (i) = static_cast<char>(ival); + } + } + + retval.insert (tmp, ra_idx); + return retval; +} + +charNDArray +concat (const NDArray& ra, const charNDArray& rb, const Array<int>& ra_idx) +{ + charNDArray retval (ra.dims ()); + int nel = ra.numel (); + + for (int i = 0; i < nel; i++) + { + double d = ra.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); + } + } + + retval.insert (rb, ra_idx); + return retval; +} + +charNDArray& +charNDArray::insert (const charNDArray& a, int r, int c) +{ + Array<char>::insert (a, r, c); + return *this; +} + +charNDArray& +charNDArray::insert (const charNDArray& a, const Array<int>& ra_idx) +{ + Array<char>::insert (a, ra_idx); + return *this; } charMatrix