Mercurial > octave-nkf
comparison src/bitfcns.cc @ 4919:a1073eef650c
[project @ 2004-07-27 15:22:50 by jwe]
author | jwe |
---|---|
date | Tue, 27 Jul 2004 15:22:51 +0000 |
parents | c638c144d4da |
children | b22a7a1db0d5 |
comparison
equal
deleted
inserted
replaced
4918:d2a7208f35d4 | 4919:a1073eef650c |
---|---|
84 \ | 84 \ |
85 int nargin = args.length (); \ | 85 int nargin = args.length (); \ |
86 \ | 86 \ |
87 if (nargin == 2) \ | 87 if (nargin == 2) \ |
88 { \ | 88 { \ |
89 if (args(0).type_id () == octave_matrix::static_type_id () || \ | 89 if (args(0).type_id () == octave_matrix::static_type_id () \ |
90 args(0).type_id () == octave_scalar::static_type_id () || \ | 90 || args(0).type_id () == octave_scalar::static_type_id () \ |
91 args(1).type_id () == octave_matrix::static_type_id () || \ | 91 || args(1).type_id () == octave_matrix::static_type_id () \ |
92 args(1).type_id () == octave_scalar::static_type_id ()) \ | 92 || args(1).type_id () == octave_scalar::static_type_id ()) \ |
93 { \ | 93 { \ |
94 bool arg0_is_int = true; \ | 94 bool arg0_is_int = true; \ |
95 bool arg1_is_int = true; \ | 95 bool arg1_is_int = true; \ |
96 \ | 96 \ |
97 if (args(0).type_id () == octave_matrix::static_type_id () || \ | 97 if (args(0).type_id () == octave_matrix::static_type_id () \ |
98 args(0).type_id () == octave_scalar::static_type_id ()) \ | 98 || args(0).type_id () == octave_scalar::static_type_id ()) \ |
99 arg0_is_int = false; \ | 99 arg0_is_int = false; \ |
100 \ | 100 \ |
101 if (args(1).type_id () == octave_matrix::static_type_id () || \ | 101 if (args(1).type_id () == octave_matrix::static_type_id () \ |
102 args(1).type_id () == octave_scalar::static_type_id ()) \ | 102 || args(1).type_id () == octave_scalar::static_type_id ()) \ |
103 arg1_is_int = false; \ | 103 arg1_is_int = false; \ |
104 \ | 104 \ |
105 if (!arg0_is_int && !arg1_is_int) \ | 105 if (!arg0_is_int && !arg1_is_int) \ |
106 { \ | 106 { \ |
107 uint64NDArray x (args(0).array_value ()); \ | 107 uint64NDArray x (args(0).array_value ()); \ |
108 uint64NDArray y (args(1).array_value ()); \ | 108 uint64NDArray y (args(1).array_value ()); \ |
109 if (! error_state) \ | 109 if (! error_state) \ |
110 BITOPX (OP, FNAME, uint64NDArray); \ | 110 BITOPX (OP, FNAME, uint64NDArray); \ |
111 retval = retval.array_value (); \ | 111 retval = retval.array_value (); \ |
112 } \ | 112 } \ |
113 else \ | 113 else \ |
114 { \ | 114 { \ |
115 int p = (arg0_is_int ? 1 : 0); \ | 115 int p = (arg0_is_int ? 1 : 0); \ |
116 int q = (arg0_is_int ? 0 : 1); \ | 116 int q = (arg0_is_int ? 0 : 1); \ |
117 \ | |
117 NDArray dx = args(p).array_value (); \ | 118 NDArray dx = args(p).array_value (); \ |
118 \ | 119 \ |
119 if (args(q).type_id () == octave_uint64_matrix::static_type_id () || \ | 120 if (args(q).type_id () == octave_uint64_matrix::static_type_id () \ |
120 args(q).type_id () == octave_uint64_scalar::static_type_id ()) \ | 121 || args(q).type_id () == octave_uint64_scalar::static_type_id ()) \ |
121 { \ | 122 { \ |
122 uint64NDArray x (dx); \ | 123 uint64NDArray x (dx); \ |
123 uint64NDArray y = args(q).uint64_array_value (); \ | 124 uint64NDArray y = args(q).uint64_array_value (); \ |
124 if (! error_state) \ | 125 if (! error_state) \ |
125 BITOPX (OP, FNAME, uint64NDArray); \ | 126 BITOPX (OP, FNAME, uint64NDArray); \ |
126 } \ | 127 } \ |
127 else if (args(q).type_id () == octave_uint32_matrix::static_type_id () || \ | 128 else if (args(q).type_id () == octave_uint32_matrix::static_type_id () \ |
128 args(q).type_id () == octave_uint32_scalar::static_type_id ()) \ | 129 || args(q).type_id () == octave_uint32_scalar::static_type_id ()) \ |
129 { \ | 130 { \ |
130 uint32NDArray x (dx); \ | 131 uint32NDArray x (dx); \ |
131 uint32NDArray y = args(q).uint32_array_value (); \ | 132 uint32NDArray y = args(q).uint32_array_value (); \ |
132 if (! error_state) \ | 133 if (! error_state) \ |
133 BITOPX (OP, FNAME, uint32NDArray); \ | 134 BITOPX (OP, FNAME, uint32NDArray); \ |
134 } \ | 135 } \ |
135 else if (args(q).type_id () == octave_uint16_matrix::static_type_id () || \ | 136 else if (args(q).type_id () == octave_uint16_matrix::static_type_id () \ |
136 args(q).type_id () == octave_uint16_scalar::static_type_id ()) \ | 137 || args(q).type_id () == octave_uint16_scalar::static_type_id ()) \ |
137 { \ | 138 { \ |
138 uint16NDArray x (dx); \ | 139 uint16NDArray x (dx); \ |
139 uint16NDArray y = args(q).uint16_array_value (); \ | 140 uint16NDArray y = args(q).uint16_array_value (); \ |
140 if (! error_state) \ | 141 if (! error_state) \ |
141 BITOPX (OP, FNAME, uint16NDArray); \ | 142 BITOPX (OP, FNAME, uint16NDArray); \ |
142 } \ | 143 } \ |
143 else if (args(q).type_id () == octave_uint8_matrix::static_type_id () || \ | 144 else if (args(q).type_id () == octave_uint8_matrix::static_type_id () \ |
144 args(q).type_id () == octave_uint8_scalar::static_type_id ()) \ | 145 || args(q).type_id () == octave_uint8_scalar::static_type_id ()) \ |
145 { \ | 146 { \ |
146 uint8NDArray x (dx); \ | 147 uint8NDArray x (dx); \ |
147 uint8NDArray y = args(q).uint8_array_value (); \ | 148 uint8NDArray y = args(q).uint8_array_value (); \ |
148 if (! error_state) \ | 149 if (! error_state) \ |
149 BITOPX (OP, FNAME, uint8NDArray); \ | 150 BITOPX (OP, FNAME, uint8NDArray); \ |
150 } \ | 151 } \ |
151 else if (args(q).type_id () == octave_int64_matrix::static_type_id () || \ | 152 else if (args(q).type_id () == octave_int64_matrix::static_type_id () \ |
152 args(q).type_id () == octave_int64_scalar::static_type_id ()) \ | 153 || args(q).type_id () == octave_int64_scalar::static_type_id ()) \ |
153 { \ | 154 { \ |
154 int64NDArray x (dx); \ | 155 int64NDArray x (dx); \ |
155 int64NDArray y = args(q).int64_array_value (); \ | 156 int64NDArray y = args(q).int64_array_value (); \ |
156 if (! error_state) \ | 157 if (! error_state) \ |
157 BITOPX (OP, FNAME, int64NDArray); \ | 158 BITOPX (OP, FNAME, int64NDArray); \ |
158 } \ | 159 } \ |
159 else if (args(q).type_id () == octave_int32_matrix::static_type_id () || \ | 160 else if (args(q).type_id () == octave_int32_matrix::static_type_id () \ |
160 args(q).type_id () == octave_int32_scalar::static_type_id ()) \ | 161 || args(q).type_id () == octave_int32_scalar::static_type_id ()) \ |
161 { \ | 162 { \ |
162 int32NDArray x (dx); \ | 163 int32NDArray x (dx); \ |
163 int32NDArray y = args(q).int32_array_value (); \ | 164 int32NDArray y = args(q).int32_array_value (); \ |
164 if (! error_state) \ | 165 if (! error_state) \ |
165 BITOPX (OP, FNAME, int32NDArray); \ | 166 BITOPX (OP, FNAME, int32NDArray); \ |
166 } \ | 167 } \ |
167 else if (args(q).type_id () == octave_int16_matrix::static_type_id () || \ | 168 else if (args(q).type_id () == octave_int16_matrix::static_type_id () \ |
168 args(q).type_id () == octave_int16_scalar::static_type_id ()) \ | 169 || args(q).type_id () == octave_int16_scalar::static_type_id ()) \ |
169 { \ | 170 { \ |
170 int16NDArray x (dx); \ | 171 int16NDArray x (dx); \ |
171 int16NDArray y = args(q).int16_array_value (); \ | 172 int16NDArray y = args(q).int16_array_value (); \ |
172 if (! error_state) \ | 173 if (! error_state) \ |
173 BITOPX (OP, FNAME, int16NDArray); \ | 174 BITOPX (OP, FNAME, int16NDArray); \ |
174 } \ | 175 } \ |
175 else if (args(q).type_id () == octave_int8_matrix::static_type_id () || \ | 176 else if (args(q).type_id () == octave_int8_matrix::static_type_id () \ |
176 args(q).type_id () == octave_int8_scalar::static_type_id ()) \ | 177 || args(q).type_id () == octave_int8_scalar::static_type_id ()) \ |
177 { \ | 178 { \ |
178 int8NDArray x (dx); \ | 179 int8NDArray x (dx); \ |
179 int8NDArray y = args(q).int8_array_value (); \ | 180 int8NDArray y = args(q).int8_array_value (); \ |
180 if (! error_state) \ | 181 if (! error_state) \ |
181 BITOPX (OP, FNAME, int8NDArray); \ | 182 BITOPX (OP, FNAME, int8NDArray); \ |
182 } \ | 183 } \ |
183 else \ | 184 else \ |
184 error ("%s: illegal operand type", FNAME); \ | 185 error ("%s: invalid operand type", FNAME); \ |
185 } \ | 186 } \ |
186 } \ | 187 } \ |
187 else if (args(0).type_id () == args(1).type_id ()) \ | 188 else if (args(0).type_id () == args(1).type_id ()) \ |
188 { \ | 189 { \ |
189 if (args(0).type_id () == octave_uint64_matrix::static_type_id () || \ | 190 if (args(0).type_id () == octave_uint64_matrix::static_type_id () \ |
190 args(0).type_id () == octave_uint64_scalar::static_type_id ()) \ | 191 || args(0).type_id () == octave_uint64_scalar::static_type_id ()) \ |
191 { \ | 192 { \ |
192 uint64NDArray x = args(0).uint64_array_value (); \ | 193 uint64NDArray x = args(0).uint64_array_value (); \ |
193 uint64NDArray y = args(1).uint64_array_value (); \ | 194 uint64NDArray y = args(1).uint64_array_value (); \ |
194 if (! error_state) \ | 195 if (! error_state) \ |
195 BITOPX (OP, FNAME, uint64NDArray); \ | 196 BITOPX (OP, FNAME, uint64NDArray); \ |
196 } \ | 197 } \ |
197 else if (args(0).type_id () == octave_uint32_matrix::static_type_id () || \ | 198 else if (args(0).type_id () == octave_uint32_matrix::static_type_id () \ |
198 args(0).type_id () == octave_uint32_scalar::static_type_id ()) \ | 199 || args(0).type_id () == octave_uint32_scalar::static_type_id ()) \ |
199 { \ | 200 { \ |
200 uint32NDArray x = args(0).uint32_array_value (); \ | 201 uint32NDArray x = args(0).uint32_array_value (); \ |
201 uint32NDArray y = args(1).uint32_array_value (); \ | 202 uint32NDArray y = args(1).uint32_array_value (); \ |
202 if (! error_state) \ | 203 if (! error_state) \ |
203 BITOPX (OP, FNAME, uint32NDArray); \ | 204 BITOPX (OP, FNAME, uint32NDArray); \ |
204 } \ | 205 } \ |
205 else if (args(0).type_id () == octave_uint16_matrix::static_type_id () || \ | 206 else if (args(0).type_id () == octave_uint16_matrix::static_type_id () \ |
206 args(0).type_id () == octave_uint16_scalar::static_type_id ()) \ | 207 || args(0).type_id () == octave_uint16_scalar::static_type_id ()) \ |
207 { \ | 208 { \ |
208 uint16NDArray x = args(0).uint16_array_value (); \ | 209 uint16NDArray x = args(0).uint16_array_value (); \ |
209 uint16NDArray y = args(1).uint16_array_value (); \ | 210 uint16NDArray y = args(1).uint16_array_value (); \ |
210 if (! error_state) \ | 211 if (! error_state) \ |
211 BITOPX (OP, FNAME, uint16NDArray); \ | 212 BITOPX (OP, FNAME, uint16NDArray); \ |
212 } \ | 213 } \ |
213 else if (args(0).type_id () == octave_uint8_matrix::static_type_id () || \ | 214 else if (args(0).type_id () == octave_uint8_matrix::static_type_id () \ |
214 args(0).type_id () == octave_uint8_scalar::static_type_id ()) \ | 215 || args(0).type_id () == octave_uint8_scalar::static_type_id ()) \ |
215 { \ | 216 { \ |
216 uint8NDArray x = args(0).uint8_array_value (); \ | 217 uint8NDArray x = args(0).uint8_array_value (); \ |
217 uint8NDArray y = args(1).uint8_array_value (); \ | 218 uint8NDArray y = args(1).uint8_array_value (); \ |
218 if (! error_state) \ | 219 if (! error_state) \ |
219 BITOPX (OP, FNAME, uint8NDArray); \ | 220 BITOPX (OP, FNAME, uint8NDArray); \ |
220 } \ | 221 } \ |
221 else if (args(0).type_id () == octave_int64_matrix::static_type_id () || \ | 222 else if (args(0).type_id () == octave_int64_matrix::static_type_id () \ |
222 args(0).type_id () == octave_int64_scalar::static_type_id ()) \ | 223 || args(0).type_id () == octave_int64_scalar::static_type_id ()) \ |
223 { \ | 224 { \ |
224 int64NDArray x = args(0).int64_array_value (); \ | 225 int64NDArray x = args(0).int64_array_value (); \ |
225 int64NDArray y = args(1).int64_array_value (); \ | 226 int64NDArray y = args(1).int64_array_value (); \ |
226 if (! error_state) \ | 227 if (! error_state) \ |
227 BITOPX (OP, FNAME, int64NDArray); \ | 228 BITOPX (OP, FNAME, int64NDArray); \ |
228 } \ | 229 } \ |
229 else if (args(0).type_id () == octave_int32_matrix::static_type_id () || \ | 230 else if (args(0).type_id () == octave_int32_matrix::static_type_id () \ |
230 args(0).type_id () == octave_int32_scalar::static_type_id ()) \ | 231 || args(0).type_id () == octave_int32_scalar::static_type_id ()) \ |
231 { \ | 232 { \ |
232 int32NDArray x = args(0).int32_array_value (); \ | 233 int32NDArray x = args(0).int32_array_value (); \ |
233 int32NDArray y = args(1).int32_array_value (); \ | 234 int32NDArray y = args(1).int32_array_value (); \ |
234 if (! error_state) \ | 235 if (! error_state) \ |
235 BITOPX (OP, FNAME, int32NDArray); \ | 236 BITOPX (OP, FNAME, int32NDArray); \ |
236 } \ | 237 } \ |
237 else if (args(0).type_id () == octave_int16_matrix::static_type_id () || \ | 238 else if (args(0).type_id () == octave_int16_matrix::static_type_id () \ |
238 args(0).type_id () == octave_int16_scalar::static_type_id ()) \ | 239 || args(0).type_id () == octave_int16_scalar::static_type_id ()) \ |
239 { \ | 240 { \ |
240 int16NDArray x = args(0).int16_array_value (); \ | 241 int16NDArray x = args(0).int16_array_value (); \ |
241 int16NDArray y = args(1).int16_array_value (); \ | 242 int16NDArray y = args(1).int16_array_value (); \ |
242 if (! error_state) \ | 243 if (! error_state) \ |
243 BITOPX (OP, FNAME, int16NDArray); \ | 244 BITOPX (OP, FNAME, int16NDArray); \ |
244 } \ | 245 } \ |
245 else if (args(0).type_id () == octave_int8_matrix::static_type_id () || \ | 246 else if (args(0).type_id () == octave_int8_matrix::static_type_id () \ |
246 args(0).type_id () == octave_int8_scalar::static_type_id ()) \ | 247 || args(0).type_id () == octave_int8_scalar::static_type_id ()) \ |
247 { \ | 248 { \ |
248 int8NDArray x = args(0).int8_array_value (); \ | 249 int8NDArray x = args(0).int8_array_value (); \ |
249 int8NDArray y = args(1).int8_array_value (); \ | 250 int8NDArray y = args(1).int8_array_value (); \ |
250 if (! error_state) \ | 251 if (! error_state) \ |
251 BITOPX (OP, FNAME, int8NDArray); \ | 252 BITOPX (OP, FNAME, int8NDArray); \ |
252 } \ | 253 } \ |
253 else \ | 254 else \ |
254 error ("%s: illegal operand type", FNAME); \ | 255 error ("%s: invalid operand type", FNAME); \ |
255 } \ | 256 } \ |
256 else \ | 257 else \ |
257 error ("%s: must have matching operand types", FNAME); \ | 258 error ("%s: must have matching operand types", FNAME); \ |
258 } \ | 259 } \ |
259 else \ | 260 else \ |
303 return static_cast<EIGHT_BYTE_INT> (a) >> -n; | 304 return static_cast<EIGHT_BYTE_INT> (a) >> -n; |
304 else | 305 else |
305 return static_cast<EIGHT_BYTE_INT> (a); | 306 return static_cast<EIGHT_BYTE_INT> (a); |
306 } | 307 } |
307 | 308 |
308 // Note that the bitshift operators are undefined if shifted by more bits than | 309 // Note that the bitshift operators are undefined if shifted by more |
309 // in the type. Therefore need to test for the size of the shift | 310 // bits than in the type, so we need to test for the size of the |
311 // shift. | |
312 | |
310 #define DO_BITSHIFT(T) \ | 313 #define DO_BITSHIFT(T) \ |
311 if (! error_state) \ | 314 if (! error_state) \ |
315 { \ | |
316 double d1, d2; \ | |
317 \ | |
318 if (n.all_integers (d1, d2)) \ | |
312 { \ | 319 { \ |
313 double d1, d2; \ | 320 int m_nel = m.numel (); \ |
314 \ | 321 int n_nel = n.numel (); \ |
315 if (n.all_integers (d1, d2)) \ | 322 \ |
316 { \ | 323 bool is_scalar_op = (m_nel == 1 || n_nel == 1); \ |
317 int m_nel = m.numel (); \ | 324 \ |
318 int n_nel = n.numel (); \ | 325 dim_vector m_dv = m.dims (); \ |
319 \ | 326 dim_vector n_dv = n.dims (); \ |
320 bool is_scalar_op = (m_nel == 1 || n_nel == 1); \ | 327 \ |
321 \ | 328 bool is_array_op = (m_dv == n_dv); \ |
322 dim_vector m_dv = m.dims (); \ | 329 \ |
323 dim_vector n_dv = n.dims (); \ | 330 if (is_array_op || is_scalar_op) \ |
324 \ | 331 { \ |
325 bool is_array_op = (m_dv == n_dv); \ | 332 T ## NDArray result; \ |
326 \ | 333 \ |
327 if (is_array_op || is_scalar_op) \ | 334 if (m_nel != 1) \ |
328 { \ | 335 result.resize (m_dv); \ |
329 T ## NDArray result; \ | 336 else \ |
330 \ | 337 result.resize (n_dv); \ |
331 if (m_nel != 1) \ | 338 \ |
332 result.resize (m_dv); \ | 339 for (int i = 0; i < m_nel; i++) \ |
333 else \ | 340 if (is_scalar_op) \ |
334 result.resize (n_dv); \ | 341 for (int k = 0; k < n_nel; k++) \ |
335 \ | 342 if (static_cast<int> (n(k)) >= bits_in_type) \ |
336 for (int i = 0; i < m_nel; i++) \ | 343 result(i+k) = 0; \ |
337 if (is_scalar_op) \ | |
338 for (int k = 0; k < n_nel; k++) \ | |
339 if (static_cast<int> (n(k)) >= bits_in_type) \ | |
340 result(i+k) = 0; \ | |
341 else \ | |
342 result(i+k) = bitshift (m(i), static_cast<int> (n(k))) & mask; \ | |
343 else \ | 344 else \ |
344 if (static_cast<int> (n(i)) >= bits_in_type) \ | 345 result(i+k) = bitshift (m(i), static_cast<int> (n(k))) & mask; \ |
345 result(i) = 0; \ | 346 else \ |
346 else \ | 347 if (static_cast<int> (n(i)) >= bits_in_type) \ |
347 result(i) = bitshift (m(i), static_cast<int> (n(i))) & mask; \ | 348 result(i) = 0; \ |
348 \ | 349 else \ |
349 retval = result; \ | 350 result(i) = bitshift (m(i), static_cast<int> (n(i))) & mask; \ |
350 } \ | 351 \ |
351 else \ | 352 retval = result; \ |
352 error ("bitshift: size of A and N must match, or one operand must be a scalar"); \ | 353 } \ |
353 } \ | 354 else \ |
354 else \ | 355 error ("bitshift: size of A and N must match, or one operand must be a scalar"); \ |
355 error ("bitshift: expecting second argument to be integer"); \ | 356 } \ |
356 } | 357 else \ |
357 | 358 error ("bitshift: expecting second argument to be integer"); \ |
358 #define DO_UBITSHIFT(T, N) \ | 359 } |
359 do \ | 360 |
360 { \ | 361 #define DO_UBITSHIFT(T, N) \ |
361 int bits_in_type = sizeof (octave_ ## T) << 3; \ | 362 do \ |
362 T ## NDArray m = m_arg.T ## _array_value (); \ | 363 { \ |
363 octave_ ## T mask = ~0ULL; \ | 364 int bits_in_type = sizeof (octave_ ## T) << 3; \ |
364 if ((N) < static_cast<int>(sizeof (octave_ ## T) << 3)) \ | 365 T ## NDArray m = m_arg.T ## _array_value (); \ |
365 mask = mask >> ((sizeof (octave_ ## T) << 3) - (N)); \ | 366 octave_ ## T mask = ~0ULL; \ |
366 else if ((N) < 1) \ | 367 if ((N) < static_cast<int> (sizeof (octave_ ## T) << 3)) \ |
367 mask = 0; \ | 368 mask = mask >> ((sizeof (octave_ ## T) << 3) - (N)); \ |
368 DO_BITSHIFT (T); \ | 369 else if ((N) < 1) \ |
369 } \ | 370 mask = 0; \ |
371 DO_BITSHIFT (T); \ | |
372 } \ | |
370 while (0) | 373 while (0) |
371 | 374 |
372 #define DO_SBITSHIFT(T, N) \ | 375 #define DO_SBITSHIFT(T, N) \ |
373 do \ | 376 do \ |
374 { \ | 377 { \ |
375 int bits_in_type = sizeof (octave_ ## T) << 3; \ | 378 int bits_in_type = sizeof (octave_ ## T) << 3; \ |
376 T ## NDArray m = m_arg.T ## _array_value (); \ | 379 T ## NDArray m = m_arg.T ## _array_value (); \ |
377 octave_ ## T mask = -1; \ | 380 octave_ ## T mask = -1; \ |
378 if ((N) < static_cast<int>(sizeof (octave_ ## T) << 3)) \ | 381 if ((N) < static_cast<int>(sizeof (octave_ ## T) << 3)) \ |
379 mask = mask >> ((sizeof (octave_ ## T) << 3) - (N)); \ | 382 mask = mask >> ((sizeof (octave_ ## T) << 3) - (N)); \ |
380 else if ((N) < 1) \ | 383 else if ((N) < 1) \ |
381 mask = 0; \ | 384 mask = 0; \ |
382 DO_BITSHIFT (T); \ | 385 DO_BITSHIFT (T); \ |
383 } \ | 386 } \ |
384 while (0) | 387 while (0) |
385 | 388 |
386 DEFUN (bitshift, args, , | 389 DEFUN (bitshift, args, , |
387 "-*- texinfo -*-\n\ | 390 "-*- texinfo -*-\n\ |
388 @deftypefn {Function File} {} bitshift (@var{a}, @var{k})\n\ | 391 @deftypefn {Function File} {} bitshift (@var{a}, @var{k})\n\ |
477 Returns the largest integer that can be represented as a floating point\n\ | 480 Returns the largest integer that can be represented as a floating point\n\ |
478 value. That is for IEEE-754 compatiable systems with @code{2^53 - 1}.\n\ | 481 value. That is for IEEE-754 compatiable systems with @code{2^53 - 1}.\n\ |
479 @end deftypefn") | 482 @end deftypefn") |
480 { | 483 { |
481 octave_value retval; | 484 octave_value retval; |
482 if (args.length() != 0) | 485 if (args.length () != 0) |
483 print_usage ("bitmax"); | 486 print_usage ("bitmax"); |
484 else | 487 else |
485 retval = ((double)0x1FFFFFFFFFFFFFLL); | 488 retval = (static_cast<double> (0x1FFFFFFFFFFFFFLL)); |
486 return retval; | 489 return retval; |
487 } | 490 } |
488 | 491 |
489 DEFUN (intmax, args, , | 492 DEFUN (intmax, args, , |
490 "-*- texinfo -*-\n\ | 493 "-*- texinfo -*-\n\ |
493 { | 496 { |
494 octave_value retval; | 497 octave_value retval; |
495 std::string cname = "int32"; | 498 std::string cname = "int32"; |
496 int nargin = args.length (); | 499 int nargin = args.length (); |
497 | 500 |
498 if (nargin == 1 && args(0).is_string()) | 501 if (nargin == 1 && args(0).is_string ()) |
499 cname = args(0).string_value (); | 502 cname = args(0).string_value (); |
500 else if (nargin != 0) | 503 else if (nargin != 0) |
501 { | 504 { |
502 print_usage ("intmax"); | 505 print_usage ("intmax"); |
503 return retval; | 506 return retval; |
504 } | 507 } |
505 | 508 |
506 if (cname == "uint8") | 509 if (cname == "uint8") |
507 retval = octave_uint8 (std::numeric_limits<octave_uint8_t>::max()); | 510 retval = octave_uint8 (std::numeric_limits<octave_uint8_t>::max ()); |
508 else if (cname == "uint16") | 511 else if (cname == "uint16") |
509 retval = octave_uint16 (std::numeric_limits<octave_uint16_t>::max()); | 512 retval = octave_uint16 (std::numeric_limits<octave_uint16_t>::max ()); |
510 else if (cname == "uint32") | 513 else if (cname == "uint32") |
511 retval = octave_uint32 (std::numeric_limits<octave_uint32_t>::max()); | 514 retval = octave_uint32 (std::numeric_limits<octave_uint32_t>::max ()); |
512 else if (cname == "uint64") | 515 else if (cname == "uint64") |
513 retval = octave_uint64 (std::numeric_limits<octave_uint64_t>::max()); | 516 retval = octave_uint64 (std::numeric_limits<octave_uint64_t>::max ()); |
514 else if (cname == "int8") | 517 else if (cname == "int8") |
515 retval = octave_int8 (std::numeric_limits<octave_int8_t>::max()); | 518 retval = octave_int8 (std::numeric_limits<octave_int8_t>::max ()); |
516 else if (cname == "int16") | 519 else if (cname == "int16") |
517 retval = octave_int16 (std::numeric_limits<octave_int16_t>::max()); | 520 retval = octave_int16 (std::numeric_limits<octave_int16_t>::max ()); |
518 else if (cname == "int32") | 521 else if (cname == "int32") |
519 retval = octave_int32 (std::numeric_limits<octave_int32_t>::max()); | 522 retval = octave_int32 (std::numeric_limits<octave_int32_t>::max ()); |
520 else if (cname == "int64") | 523 else if (cname == "int64") |
521 retval = octave_int64 (std::numeric_limits<octave_int64_t>::max()); | 524 retval = octave_int64 (std::numeric_limits<octave_int64_t>::max ()); |
522 else | 525 else |
523 error ("intmax: not defined for '%s' objects", cname.c_str ()); | 526 error ("intmax: not defined for '%s' objects", cname.c_str ()); |
524 | 527 |
525 return retval; | 528 return retval; |
526 } | 529 } |
532 { | 535 { |
533 octave_value retval; | 536 octave_value retval; |
534 std::string cname = "int32"; | 537 std::string cname = "int32"; |
535 int nargin = args.length (); | 538 int nargin = args.length (); |
536 | 539 |
537 if (nargin == 1 && args(0).is_string()) | 540 if (nargin == 1 && args(0).is_string ()) |
538 cname = args(0).string_value (); | 541 cname = args(0).string_value (); |
539 else if (nargin != 0) | 542 else if (nargin != 0) |
540 { | 543 { |
541 print_usage ("intmin"); | 544 print_usage ("intmin"); |
542 return retval; | 545 return retval; |
543 } | 546 } |
544 | 547 |
545 if (cname == "uint8") | 548 if (cname == "uint8") |
546 retval = octave_uint8 (std::numeric_limits<octave_uint8_t>::min()); | 549 retval = octave_uint8 (std::numeric_limits<octave_uint8_t>::min ()); |
547 else if (cname == "uint16") | 550 else if (cname == "uint16") |
548 retval = octave_uint16 (std::numeric_limits<octave_uint16_t>::min()); | 551 retval = octave_uint16 (std::numeric_limits<octave_uint16_t>::min()); |
549 else if (cname == "uint32") | 552 else if (cname == "uint32") |
550 retval = octave_uint32 (std::numeric_limits<octave_uint32_t>::min()); | 553 retval = octave_uint32 (std::numeric_limits<octave_uint32_t>::min ()); |
551 else if (cname == "uint64") | 554 else if (cname == "uint64") |
552 retval = octave_uint64 (std::numeric_limits<octave_uint64_t>::min()); | 555 retval = octave_uint64 (std::numeric_limits<octave_uint64_t>::min ()); |
553 else if (cname == "int8") | 556 else if (cname == "int8") |
554 retval = octave_int8 (std::numeric_limits<octave_int8_t>::min()); | 557 retval = octave_int8 (std::numeric_limits<octave_int8_t>::min ()); |
555 else if (cname == "int16") | 558 else if (cname == "int16") |
556 retval = octave_int16 (std::numeric_limits<octave_int16_t>::min()); | 559 retval = octave_int16 (std::numeric_limits<octave_int16_t>::min ()); |
557 else if (cname == "int32") | 560 else if (cname == "int32") |
558 retval = octave_int32 (std::numeric_limits<octave_int32_t>::min()); | 561 retval = octave_int32 (std::numeric_limits<octave_int32_t>::min ()); |
559 else if (cname == "int64") | 562 else if (cname == "int64") |
560 retval = octave_int64 (std::numeric_limits<octave_int64_t>::min()); | 563 retval = octave_int64 (std::numeric_limits<octave_int64_t>::min ()); |
561 else | 564 else |
562 error ("intmin: not defined for '%s' objects", cname.c_str ()); | 565 error ("intmin: not defined for '%s' objects", cname.c_str ()); |
563 | 566 |
564 return retval; | 567 return retval; |
565 } | 568 } |