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 {