Mercurial > octave-nkf
comparison liboctave/chNDArray.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 |
comparison
equal
deleted
inserted
replaced
5072:97b62f0c1bee | 5073:e71be9c548f2 |
---|---|
48 { | 48 { |
49 MX_ND_ANY_ALL_REDUCTION (MX_ND_ANY_EVAL (elem (iter_idx) != ' '), false); | 49 MX_ND_ANY_ALL_REDUCTION (MX_ND_ANY_EVAL (elem (iter_idx) != ' '), false); |
50 } | 50 } |
51 | 51 |
52 charNDArray | 52 charNDArray |
53 concat (const charNDArray& ra, const charNDArray& rb, const Array<int>& ra_idx) | 53 charNDArray::concat (const charNDArray& rb, const Array<int>& ra_idx) |
54 { | 54 { |
55 charNDArray retval (ra); | |
56 if (rb.numel () > 0) | 55 if (rb.numel () > 0) |
57 retval.insert (rb, ra_idx); | 56 insert (rb, ra_idx); |
58 return retval; | 57 return *this; |
59 } | 58 } |
60 | 59 |
61 charNDArray | 60 charNDArray |
62 concat (const charNDArray& ra, const NDArray& rb, const Array<int>& ra_idx) | 61 charNDArray::concat (const NDArray& rb, const Array<int>& ra_idx) |
63 { | 62 { |
64 charNDArray retval (ra); | |
65 charNDArray tmp (rb.dims ()); | 63 charNDArray tmp (rb.dims ()); |
66 int nel = rb.numel (); | 64 int nel = rb.numel (); |
67 | 65 |
68 if (rb.numel () == 0) | 66 if (rb.numel () == 0) |
69 return retval; | 67 return *this; |
70 | 68 |
71 for (int i = 0; i < nel; i++) | 69 for (int i = 0; i < nel; i++) |
72 { | 70 { |
73 double d = rb.elem (i); | 71 double d = rb.elem (i); |
74 | 72 |
75 if (xisnan (d)) | 73 if (xisnan (d)) |
76 { | 74 { |
77 (*current_liboctave_error_handler) | 75 (*current_liboctave_error_handler) |
78 ("invalid conversion from NaN to character"); | 76 ("invalid conversion from NaN to character"); |
79 return retval; | 77 return *this; |
80 } | 78 } |
81 else | 79 else |
82 { | 80 { |
83 int ival = NINT (d); | 81 int ival = NINT (d); |
84 | 82 |
89 | 87 |
90 tmp.elem (i) = static_cast<char>(ival); | 88 tmp.elem (i) = static_cast<char>(ival); |
91 } | 89 } |
92 } | 90 } |
93 | 91 |
94 retval.insert (tmp, ra_idx); | 92 insert (tmp, ra_idx); |
95 return retval; | 93 return *this; |
96 } | |
97 | |
98 charNDArray | |
99 concat (const NDArray& ra, const charNDArray& rb, const Array<int>& ra_idx) | |
100 { | |
101 charNDArray retval (ra.dims ()); | |
102 int nel = ra.numel (); | |
103 | |
104 for (int i = 0; i < nel; i++) | |
105 { | |
106 double d = ra.elem (i); | |
107 | |
108 if (xisnan (d)) | |
109 { | |
110 (*current_liboctave_error_handler) | |
111 ("invalid conversion from NaN to character"); | |
112 return retval; | |
113 } | |
114 else | |
115 { | |
116 int ival = NINT (d); | |
117 | |
118 if (ival < 0 || ival > UCHAR_MAX) | |
119 // XXX FIXME XXX -- is there something | |
120 // better we could do? Should we warn the user? | |
121 ival = 0; | |
122 | |
123 retval.elem (i) = static_cast<char>(ival); | |
124 } | |
125 } | |
126 | |
127 if (rb.numel () == 0) | |
128 return retval; | |
129 | |
130 retval.insert (rb, ra_idx); | |
131 return retval; | |
132 } | 94 } |
133 | 95 |
134 charNDArray& | 96 charNDArray& |
135 charNDArray::insert (const charNDArray& a, int r, int c) | 97 charNDArray::insert (const charNDArray& a, int r, int c) |
136 { | 98 { |