Mercurial > octave
comparison libinterp/octave-value/ov.cc @ 21293:350caa6afadf
* ov.cc: Use consistent style for switch statements.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 18 Feb 2016 11:10:05 -0500 |
parents | a83e7a384ee0 |
children | 3d375b0905a0 |
comparison
equal
deleted
inserted
replaced
21292:c1c601b8e3df | 21293:350caa6afadf |
---|---|
111 // Octave's value type. | 111 // Octave's value type. |
112 | 112 |
113 std::string | 113 std::string |
114 octave_value::unary_op_as_string (unary_op op) | 114 octave_value::unary_op_as_string (unary_op op) |
115 { | 115 { |
116 std::string retval; | |
117 | |
118 switch (op) | 116 switch (op) |
119 { | 117 { |
120 case op_not: | 118 case op_not: |
121 retval = "!"; | 119 return "!"; |
122 break; | |
123 | 120 |
124 case op_uplus: | 121 case op_uplus: |
125 retval = "+"; | 122 return "+"; |
126 break; | |
127 | 123 |
128 case op_uminus: | 124 case op_uminus: |
129 retval = "-"; | 125 return "-"; |
130 break; | |
131 | 126 |
132 case op_transpose: | 127 case op_transpose: |
133 retval = ".'"; | 128 return ".'"; |
134 break; | |
135 | 129 |
136 case op_hermitian: | 130 case op_hermitian: |
137 retval = "'"; | 131 return "'"; |
138 break; | |
139 | 132 |
140 case op_incr: | 133 case op_incr: |
141 retval = "++"; | 134 return "++"; |
142 break; | |
143 | 135 |
144 case op_decr: | 136 case op_decr: |
145 retval = "--"; | 137 return "--"; |
146 break; | |
147 | 138 |
148 default: | 139 default: |
149 retval = "<unknown>"; | 140 return "<unknown>"; |
150 } | 141 } |
151 | |
152 return retval; | |
153 } | 142 } |
154 | 143 |
155 std::string | 144 std::string |
156 octave_value::unary_op_fcn_name (unary_op op) | 145 octave_value::unary_op_fcn_name (unary_op op) |
157 { | 146 { |
158 std::string retval; | |
159 | |
160 switch (op) | 147 switch (op) |
161 { | 148 { |
162 case op_not: | 149 case op_not: |
163 retval = "not"; | 150 return "not"; |
164 break; | |
165 | 151 |
166 case op_uplus: | 152 case op_uplus: |
167 retval = "uplus"; | 153 return "uplus"; |
168 break; | |
169 | 154 |
170 case op_uminus: | 155 case op_uminus: |
171 retval = "uminus"; | 156 return "uminus"; |
172 break; | |
173 | 157 |
174 case op_transpose: | 158 case op_transpose: |
175 retval = "transpose"; | 159 return "transpose"; |
176 break; | |
177 | 160 |
178 case op_hermitian: | 161 case op_hermitian: |
179 retval = "ctranspose"; | 162 return "ctranspose"; |
180 break; | |
181 | 163 |
182 default: | 164 default: |
183 break; | 165 return "<unknown>"; |
184 } | 166 } |
185 | |
186 return retval; | |
187 } | 167 } |
188 | 168 |
189 std::string | 169 std::string |
190 octave_value::binary_op_as_string (binary_op op) | 170 octave_value::binary_op_as_string (binary_op op) |
191 { | 171 { |
192 std::string retval; | |
193 | |
194 switch (op) | 172 switch (op) |
195 { | 173 { |
196 case op_add: | 174 case op_add: |
197 retval = "+"; | 175 return "+"; |
198 break; | |
199 | 176 |
200 case op_sub: | 177 case op_sub: |
201 retval = "-"; | 178 return "-"; |
202 break; | |
203 | 179 |
204 case op_mul: | 180 case op_mul: |
205 retval = "*"; | 181 return "*"; |
206 break; | |
207 | 182 |
208 case op_div: | 183 case op_div: |
209 retval = "/"; | 184 return "/"; |
210 break; | |
211 | 185 |
212 case op_pow: | 186 case op_pow: |
213 retval = "^"; | 187 return "^"; |
214 break; | |
215 | 188 |
216 case op_ldiv: | 189 case op_ldiv: |
217 retval = "\\"; | 190 return "\\"; |
218 break; | |
219 | 191 |
220 case op_lshift: | 192 case op_lshift: |
221 retval = "<<"; | 193 return "<<"; |
222 break; | |
223 | 194 |
224 case op_rshift: | 195 case op_rshift: |
225 retval = ">>"; | 196 return ">>"; |
226 break; | |
227 | 197 |
228 case op_lt: | 198 case op_lt: |
229 retval = "<"; | 199 return "<"; |
230 break; | |
231 | 200 |
232 case op_le: | 201 case op_le: |
233 retval = "<="; | 202 return "<="; |
234 break; | |
235 | 203 |
236 case op_eq: | 204 case op_eq: |
237 retval = "=="; | 205 return "=="; |
238 break; | |
239 | 206 |
240 case op_ge: | 207 case op_ge: |
241 retval = ">="; | 208 return ">="; |
242 break; | |
243 | 209 |
244 case op_gt: | 210 case op_gt: |
245 retval = ">"; | 211 return ">"; |
246 break; | |
247 | 212 |
248 case op_ne: | 213 case op_ne: |
249 retval = "!="; | 214 return "!="; |
250 break; | |
251 | 215 |
252 case op_el_mul: | 216 case op_el_mul: |
253 retval = ".*"; | 217 return ".*"; |
254 break; | |
255 | 218 |
256 case op_el_div: | 219 case op_el_div: |
257 retval = "./"; | 220 return "./"; |
258 break; | |
259 | 221 |
260 case op_el_pow: | 222 case op_el_pow: |
261 retval = ".^"; | 223 return ".^"; |
262 break; | |
263 | 224 |
264 case op_el_ldiv: | 225 case op_el_ldiv: |
265 retval = ".\\"; | 226 return ".\\"; |
266 break; | |
267 | 227 |
268 case op_el_and: | 228 case op_el_and: |
269 retval = "&"; | 229 return "&"; |
270 break; | |
271 | 230 |
272 case op_el_or: | 231 case op_el_or: |
273 retval = "|"; | 232 return "|"; |
274 break; | |
275 | 233 |
276 case op_struct_ref: | 234 case op_struct_ref: |
277 retval = "."; | 235 return "."; |
278 break; | |
279 | 236 |
280 default: | 237 default: |
281 retval = "<unknown>"; | 238 return "<unknown>"; |
282 } | 239 } |
283 | |
284 return retval; | |
285 } | 240 } |
286 | 241 |
287 std::string | 242 std::string |
288 octave_value::binary_op_fcn_name (binary_op op) | 243 octave_value::binary_op_fcn_name (binary_op op) |
289 { | 244 { |
290 std::string retval; | |
291 | |
292 switch (op) | 245 switch (op) |
293 { | 246 { |
294 case op_add: | 247 case op_add: |
295 retval = "plus"; | 248 return "plus"; |
296 break; | |
297 | 249 |
298 case op_sub: | 250 case op_sub: |
299 retval = "minus"; | 251 return "minus"; |
300 break; | |
301 | 252 |
302 case op_mul: | 253 case op_mul: |
303 retval = "mtimes"; | 254 return "mtimes"; |
304 break; | |
305 | 255 |
306 case op_div: | 256 case op_div: |
307 retval = "mrdivide"; | 257 return "mrdivide"; |
308 break; | |
309 | 258 |
310 case op_pow: | 259 case op_pow: |
311 retval = "mpower"; | 260 return "mpower"; |
312 break; | |
313 | 261 |
314 case op_ldiv: | 262 case op_ldiv: |
315 retval = "mldivide"; | 263 return "mldivide"; |
316 break; | |
317 | 264 |
318 case op_lt: | 265 case op_lt: |
319 retval = "lt"; | 266 return "lt"; |
320 break; | |
321 | 267 |
322 case op_le: | 268 case op_le: |
323 retval = "le"; | 269 return "le"; |
324 break; | |
325 | 270 |
326 case op_eq: | 271 case op_eq: |
327 retval = "eq"; | 272 return "eq"; |
328 break; | |
329 | 273 |
330 case op_ge: | 274 case op_ge: |
331 retval = "ge"; | 275 return "ge"; |
332 break; | |
333 | 276 |
334 case op_gt: | 277 case op_gt: |
335 retval = "gt"; | 278 return "gt"; |
336 break; | |
337 | 279 |
338 case op_ne: | 280 case op_ne: |
339 retval = "ne"; | 281 return "ne"; |
340 break; | |
341 | 282 |
342 case op_el_mul: | 283 case op_el_mul: |
343 retval = "times"; | 284 return "times"; |
344 break; | |
345 | 285 |
346 case op_el_div: | 286 case op_el_div: |
347 retval = "rdivide"; | 287 return "rdivide"; |
348 break; | |
349 | 288 |
350 case op_el_pow: | 289 case op_el_pow: |
351 retval = "power"; | 290 return "power"; |
352 break; | |
353 | 291 |
354 case op_el_ldiv: | 292 case op_el_ldiv: |
355 retval = "ldivide"; | 293 return "ldivide"; |
356 break; | |
357 | 294 |
358 case op_el_and: | 295 case op_el_and: |
359 retval = "and"; | 296 return "and"; |
360 break; | |
361 | 297 |
362 case op_el_or: | 298 case op_el_or: |
363 retval = "or"; | 299 return "or"; |
364 break; | |
365 | 300 |
366 default: | 301 default: |
367 break; | 302 return "<unknown>"; |
368 } | 303 } |
369 | |
370 return retval; | |
371 } | 304 } |
372 | 305 |
373 std::string | 306 std::string |
374 octave_value::binary_op_fcn_name (compound_binary_op op) | 307 octave_value::binary_op_fcn_name (compound_binary_op op) |
375 { | 308 { |
376 std::string retval; | |
377 | |
378 switch (op) | 309 switch (op) |
379 { | 310 { |
380 case op_trans_mul: | 311 case op_trans_mul: |
381 retval = "transtimes"; | 312 return "transtimes"; |
382 break; | |
383 | 313 |
384 case op_mul_trans: | 314 case op_mul_trans: |
385 retval = "timestrans"; | 315 return "timestrans"; |
386 break; | |
387 | 316 |
388 case op_herm_mul: | 317 case op_herm_mul: |
389 retval = "hermtimes"; | 318 return "hermtimes"; |
390 break; | |
391 | 319 |
392 case op_mul_herm: | 320 case op_mul_herm: |
393 retval = "timesherm"; | 321 return "timesherm"; |
394 break; | |
395 | 322 |
396 case op_trans_ldiv: | 323 case op_trans_ldiv: |
397 retval = "transldiv"; | 324 return "transldiv"; |
398 break; | |
399 | 325 |
400 case op_herm_ldiv: | 326 case op_herm_ldiv: |
401 retval = "hermldiv"; | 327 return "hermldiv"; |
402 break; | |
403 | 328 |
404 case op_el_and_not: | 329 case op_el_and_not: |
405 retval = "andnot"; | 330 return "andnot"; |
406 break; | |
407 | 331 |
408 case op_el_or_not: | 332 case op_el_or_not: |
409 retval = "ornot"; | 333 return "ornot"; |
410 break; | |
411 | 334 |
412 case op_el_not_and: | 335 case op_el_not_and: |
413 retval = "notand"; | 336 return "notand"; |
414 break; | |
415 | 337 |
416 case op_el_not_or: | 338 case op_el_not_or: |
417 retval = "notor"; | 339 return "notor"; |
418 break; | |
419 | 340 |
420 default: | 341 default: |
421 break; | 342 return "<unknown>"; |
422 } | 343 } |
423 | |
424 return retval; | |
425 } | 344 } |
426 | 345 |
427 std::string | 346 std::string |
428 octave_value::assign_op_as_string (assign_op op) | 347 octave_value::assign_op_as_string (assign_op op) |
429 { | 348 { |
430 std::string retval; | |
431 | |
432 switch (op) | 349 switch (op) |
433 { | 350 { |
434 case op_asn_eq: | 351 case op_asn_eq: |
435 retval = "="; | 352 return "="; |
436 break; | |
437 | 353 |
438 case op_add_eq: | 354 case op_add_eq: |
439 retval = "+="; | 355 return "+="; |
440 break; | |
441 | 356 |
442 case op_sub_eq: | 357 case op_sub_eq: |
443 retval = "-="; | 358 return "-="; |
444 break; | |
445 | 359 |
446 case op_mul_eq: | 360 case op_mul_eq: |
447 retval = "*="; | 361 return "*="; |
448 break; | |
449 | 362 |
450 case op_div_eq: | 363 case op_div_eq: |
451 retval = "/="; | 364 return "/="; |
452 break; | |
453 | 365 |
454 case op_ldiv_eq: | 366 case op_ldiv_eq: |
455 retval = "\\="; | 367 return "\\="; |
456 break; | |
457 | 368 |
458 case op_pow_eq: | 369 case op_pow_eq: |
459 retval = "^="; | 370 return "^="; |
460 break; | |
461 | 371 |
462 case op_lshift_eq: | 372 case op_lshift_eq: |
463 retval = "<<="; | 373 return "<<="; |
464 break; | |
465 | 374 |
466 case op_rshift_eq: | 375 case op_rshift_eq: |
467 retval = ">>="; | 376 return ">>="; |
468 break; | |
469 | 377 |
470 case op_el_mul_eq: | 378 case op_el_mul_eq: |
471 retval = ".*="; | 379 return ".*="; |
472 break; | |
473 | 380 |
474 case op_el_div_eq: | 381 case op_el_div_eq: |
475 retval = "./="; | 382 return "./="; |
476 break; | |
477 | 383 |
478 case op_el_ldiv_eq: | 384 case op_el_ldiv_eq: |
479 retval = ".\\="; | 385 return ".\\="; |
480 break; | |
481 | 386 |
482 case op_el_pow_eq: | 387 case op_el_pow_eq: |
483 retval = ".^="; | 388 return ".^="; |
484 break; | |
485 | 389 |
486 case op_el_and_eq: | 390 case op_el_and_eq: |
487 retval = "&="; | 391 return "&="; |
488 break; | |
489 | 392 |
490 case op_el_or_eq: | 393 case op_el_or_eq: |
491 retval = "|="; | 394 return "|="; |
492 break; | |
493 | 395 |
494 default: | 396 default: |
495 retval = "<unknown>"; | 397 return "<unknown>"; |
496 } | 398 } |
497 | |
498 return retval; | |
499 } | 399 } |
500 | 400 |
501 octave_value::binary_op | 401 octave_value::binary_op |
502 octave_value::assign_op_to_binary_op (assign_op op) | 402 octave_value::assign_op_to_binary_op (assign_op op) |
503 { | 403 { |
504 switch (op) | 404 switch (op) |
505 { | 405 { |
506 case op_add_eq: | 406 case op_add_eq: |
507 return op_add; | 407 return op_add; |
408 | |
508 case op_sub_eq: | 409 case op_sub_eq: |
509 return op_sub; | 410 return op_sub; |
411 | |
510 case op_mul_eq: | 412 case op_mul_eq: |
511 return op_mul; | 413 return op_mul; |
414 | |
512 case op_div_eq: | 415 case op_div_eq: |
513 return op_div; | 416 return op_div; |
417 | |
514 case op_ldiv_eq: | 418 case op_ldiv_eq: |
515 return op_ldiv; | 419 return op_ldiv; |
420 | |
516 case op_pow_eq: | 421 case op_pow_eq: |
517 return op_pow; | 422 return op_pow; |
423 | |
518 case op_lshift_eq: | 424 case op_lshift_eq: |
519 return op_lshift; | 425 return op_lshift; |
426 | |
520 case op_rshift_eq: | 427 case op_rshift_eq: |
521 return op_rshift; | 428 return op_rshift; |
429 | |
522 case op_el_mul_eq: | 430 case op_el_mul_eq: |
523 return op_el_mul; | 431 return op_el_mul; |
432 | |
524 case op_el_div_eq: | 433 case op_el_div_eq: |
525 return op_el_div; | 434 return op_el_div; |
435 | |
526 case op_el_ldiv_eq: | 436 case op_el_ldiv_eq: |
527 return op_el_ldiv; | 437 return op_el_ldiv; |
438 | |
528 case op_el_pow_eq: | 439 case op_el_pow_eq: |
529 return op_el_pow; | 440 return op_el_pow; |
441 | |
530 case op_el_and_eq: | 442 case op_el_and_eq: |
531 return op_el_and; | 443 return op_el_and; |
444 | |
532 case op_el_or_eq: | 445 case op_el_or_eq: |
533 return op_el_or; | 446 return op_el_or; |
447 | |
534 default: | 448 default: |
535 return unknown_binary_op; | 449 return unknown_binary_op; |
536 } | 450 } |
537 | |
538 } | 451 } |
539 | 452 |
540 octave_value::assign_op | 453 octave_value::assign_op |
541 octave_value::binary_op_to_assign_op (binary_op op) | 454 octave_value::binary_op_to_assign_op (binary_op op) |
542 { | 455 { |
543 assign_op retval; | |
544 | |
545 switch (op) | 456 switch (op) |
546 { | 457 { |
547 case op_add: | 458 case op_add: |
548 retval = op_add_eq; | 459 return op_add_eq; |
549 break; | 460 |
550 case op_sub: | 461 case op_sub: |
551 retval = op_sub_eq; | 462 return op_sub_eq; |
552 break; | 463 |
553 case op_mul: | 464 case op_mul: |
554 retval = op_mul_eq; | 465 return op_mul_eq; |
555 break; | 466 |
556 case op_div: | 467 case op_div: |
557 retval = op_div_eq; | 468 return op_div_eq; |
558 break; | 469 |
559 case op_el_mul: | 470 case op_el_mul: |
560 retval = op_el_mul_eq; | 471 return op_el_mul_eq; |
561 break; | 472 |
562 case op_el_div: | 473 case op_el_div: |
563 retval = op_el_div_eq; | 474 return op_el_div_eq; |
564 break; | 475 |
565 case op_el_and: | 476 case op_el_and: |
566 retval = op_el_and_eq; | 477 return op_el_and_eq; |
567 break; | 478 |
568 case op_el_or: | 479 case op_el_or: |
569 retval = op_el_or_eq; | 480 return op_el_or_eq; |
570 break; | 481 |
571 default: | 482 default: |
572 retval = unknown_assign_op; | 483 return unknown_assign_op; |
573 } | 484 } |
574 | |
575 return retval; | |
576 } | 485 } |
577 | 486 |
578 octave_value::octave_value (short int i) | 487 octave_value::octave_value (short int i) |
579 : rep (new octave_scalar (i)) | 488 : rep (new octave_scalar (i)) |
580 { | 489 { |
1159 case idx_vector::class_range: | 1068 case idx_vector::class_range: |
1160 case idx_vector::class_vector: | 1069 case idx_vector::class_vector: |
1161 rep = new octave_lazy_index (idx); | 1070 rep = new octave_lazy_index (idx); |
1162 maybe_mutate (); | 1071 maybe_mutate (); |
1163 return; | 1072 return; |
1073 | |
1164 default: | 1074 default: |
1165 break; | 1075 break; |
1166 } | 1076 } |
1167 } | 1077 } |
1168 | 1078 |
1171 switch (idx_class) | 1081 switch (idx_class) |
1172 { | 1082 { |
1173 case idx_vector::class_colon: | 1083 case idx_vector::class_colon: |
1174 rep = new octave_magic_colon (); | 1084 rep = new octave_magic_colon (); |
1175 break; | 1085 break; |
1086 | |
1176 case idx_vector::class_range: | 1087 case idx_vector::class_range: |
1177 rep = new octave_range (range, idx); | 1088 rep = new octave_range (range, idx); |
1178 break; | 1089 break; |
1090 | |
1179 case idx_vector::class_scalar: | 1091 case idx_vector::class_scalar: |
1180 rep = new octave_scalar (scalar); | 1092 rep = new octave_scalar (scalar); |
1181 break; | 1093 break; |
1094 | |
1182 case idx_vector::class_vector: | 1095 case idx_vector::class_vector: |
1183 rep = new octave_matrix (array, idx); | 1096 rep = new octave_matrix (array, idx); |
1184 break; | 1097 break; |
1098 | |
1185 case idx_vector::class_mask: | 1099 case idx_vector::class_mask: |
1186 rep = new octave_bool_matrix (mask, idx); | 1100 rep = new octave_bool_matrix (mask, idx); |
1187 break; | 1101 break; |
1102 | |
1188 default: | 1103 default: |
1189 assert (false); | 1104 panic_impossible (); |
1190 break; | 1105 break; |
1191 } | 1106 } |
1192 | 1107 |
1193 // FIXME: needed? | 1108 // FIXME: needed? |
1194 maybe_mutate (); | 1109 maybe_mutate (); |
2199 | 2114 |
2200 static octave_value | 2115 static octave_value |
2201 decompose_binary_op (octave_value::compound_binary_op op, | 2116 decompose_binary_op (octave_value::compound_binary_op op, |
2202 const octave_value& v1, const octave_value& v2) | 2117 const octave_value& v1, const octave_value& v2) |
2203 { | 2118 { |
2204 octave_value retval; | |
2205 | |
2206 switch (op) | 2119 switch (op) |
2207 { | 2120 { |
2208 case octave_value::op_trans_mul: | 2121 case octave_value::op_trans_mul: |
2209 retval = do_binary_op (octave_value::op_mul, | 2122 return do_binary_op (octave_value::op_mul, |
2210 do_unary_op (octave_value::op_transpose, v1), | 2123 do_unary_op (octave_value::op_transpose, v1), v2); |
2211 v2); | 2124 |
2212 break; | |
2213 case octave_value::op_mul_trans: | 2125 case octave_value::op_mul_trans: |
2214 retval = do_binary_op (octave_value::op_mul, | 2126 return do_binary_op (octave_value::op_mul, |
2215 v1, | 2127 v1, do_unary_op (octave_value::op_transpose, v2)); |
2216 do_unary_op (octave_value::op_transpose, v2)); | 2128 |
2217 break; | |
2218 case octave_value::op_herm_mul: | 2129 case octave_value::op_herm_mul: |
2219 retval = do_binary_op (octave_value::op_mul, | 2130 return do_binary_op (octave_value::op_mul, |
2220 do_unary_op (octave_value::op_hermitian, v1), | 2131 do_unary_op (octave_value::op_hermitian, v1), v2); |
2221 v2); | 2132 |
2222 break; | |
2223 case octave_value::op_mul_herm: | 2133 case octave_value::op_mul_herm: |
2224 retval = do_binary_op (octave_value::op_mul, | 2134 return do_binary_op (octave_value::op_mul, |
2225 v1, | 2135 v1, do_unary_op (octave_value::op_hermitian, v2)); |
2226 do_unary_op (octave_value::op_hermitian, v2)); | 2136 |
2227 break; | |
2228 case octave_value::op_trans_ldiv: | 2137 case octave_value::op_trans_ldiv: |
2229 retval = do_binary_op (octave_value::op_ldiv, | 2138 return do_binary_op (octave_value::op_ldiv, |
2230 do_unary_op (octave_value::op_transpose, v1), | 2139 do_unary_op (octave_value::op_transpose, v1), v2); |
2231 v2); | 2140 |
2232 break; | |
2233 case octave_value::op_herm_ldiv: | 2141 case octave_value::op_herm_ldiv: |
2234 retval = do_binary_op (octave_value::op_ldiv, | 2142 return do_binary_op (octave_value::op_ldiv, |
2235 do_unary_op (octave_value::op_hermitian, v1), | 2143 do_unary_op (octave_value::op_hermitian, v1), v2); |
2236 v2); | 2144 |
2237 break; | |
2238 case octave_value::op_el_not_and: | 2145 case octave_value::op_el_not_and: |
2239 retval = do_binary_op (octave_value::op_el_and, | 2146 return do_binary_op (octave_value::op_el_and, |
2240 do_unary_op (octave_value::op_not, v1), | 2147 do_unary_op (octave_value::op_not, v1), v2); |
2241 v2); | 2148 |
2242 break; | |
2243 case octave_value::op_el_not_or: | 2149 case octave_value::op_el_not_or: |
2244 retval = do_binary_op (octave_value::op_el_or, | 2150 return do_binary_op (octave_value::op_el_or, |
2245 do_unary_op (octave_value::op_not, v1), | 2151 do_unary_op (octave_value::op_not, v1), v2); |
2246 v2); | 2152 |
2247 break; | |
2248 case octave_value::op_el_and_not: | 2153 case octave_value::op_el_and_not: |
2249 retval = do_binary_op (octave_value::op_el_and, | 2154 return do_binary_op (octave_value::op_el_and, |
2250 v1, | 2155 v1, do_unary_op (octave_value::op_not, v2)); |
2251 do_unary_op (octave_value::op_not, v2)); | 2156 |
2252 break; | |
2253 case octave_value::op_el_or_not: | 2157 case octave_value::op_el_or_not: |
2254 retval = do_binary_op (octave_value::op_el_or, | 2158 return do_binary_op (octave_value::op_el_or, |
2255 v1, | 2159 v1, do_unary_op (octave_value::op_not, v2)); |
2256 do_unary_op (octave_value::op_not, v2)); | 2160 |
2257 break; | |
2258 default: | 2161 default: |
2259 error ("invalid compound operator"); | 2162 error ("invalid compound operator"); |
2260 break; | 2163 } |
2261 } | |
2262 | |
2263 return retval; | |
2264 } | 2164 } |
2265 | 2165 |
2266 octave_value | 2166 octave_value |
2267 do_binary_op (octave_value::compound_binary_op op, | 2167 do_binary_op (octave_value::compound_binary_op op, |
2268 const octave_value& v1, const octave_value& v2) | 2168 const octave_value& v1, const octave_value& v2) |
2671 } | 2571 } |
2672 | 2572 |
2673 octave_value::assign_op | 2573 octave_value::assign_op |
2674 octave_value::unary_op_to_assign_op (unary_op op) | 2574 octave_value::unary_op_to_assign_op (unary_op op) |
2675 { | 2575 { |
2676 assign_op binop = unknown_assign_op; | |
2677 | |
2678 switch (op) | 2576 switch (op) |
2679 { | 2577 { |
2680 case op_incr: | 2578 case op_incr: |
2681 binop = op_add_eq; | 2579 return op_add_eq; |
2682 break; | |
2683 | 2580 |
2684 case op_decr: | 2581 case op_decr: |
2685 binop = op_sub_eq; | 2582 return op_sub_eq; |
2686 break; | |
2687 | 2583 |
2688 default: | 2584 default: |
2689 { | 2585 { |
2690 std::string on = unary_op_as_string (op); | 2586 std::string on = unary_op_as_string (op); |
2691 error ("operator %s: no assign operator found", on.c_str ()); | 2587 error ("operator %s: no assign operator found", on.c_str ()); |
2692 } | 2588 } |
2693 } | 2589 } |
2694 | |
2695 return binop; | |
2696 } | 2590 } |
2697 | 2591 |
2698 octave_value::binary_op | 2592 octave_value::binary_op |
2699 octave_value::op_eq_to_binary_op (assign_op op) | 2593 octave_value::op_eq_to_binary_op (assign_op op) |
2700 { | 2594 { |
2701 binary_op binop = unknown_binary_op; | |
2702 | |
2703 switch (op) | 2595 switch (op) |
2704 { | 2596 { |
2705 case op_add_eq: | 2597 case op_add_eq: |
2706 binop = op_add; | 2598 return op_add; |
2707 break; | |
2708 | 2599 |
2709 case op_sub_eq: | 2600 case op_sub_eq: |
2710 binop = op_sub; | 2601 return op_sub; |
2711 break; | |
2712 | 2602 |
2713 case op_mul_eq: | 2603 case op_mul_eq: |
2714 binop = op_mul; | 2604 return op_mul; |
2715 break; | |
2716 | 2605 |
2717 case op_div_eq: | 2606 case op_div_eq: |
2718 binop = op_div; | 2607 return op_div; |
2719 break; | |
2720 | 2608 |
2721 case op_ldiv_eq: | 2609 case op_ldiv_eq: |
2722 binop = op_ldiv; | 2610 return op_ldiv; |
2723 break; | |
2724 | 2611 |
2725 case op_pow_eq: | 2612 case op_pow_eq: |
2726 binop = op_pow; | 2613 return op_pow; |
2727 break; | |
2728 | 2614 |
2729 case op_lshift_eq: | 2615 case op_lshift_eq: |
2730 binop = op_lshift; | 2616 return op_lshift; |
2731 break; | |
2732 | 2617 |
2733 case op_rshift_eq: | 2618 case op_rshift_eq: |
2734 binop = op_rshift; | 2619 return op_rshift; |
2735 break; | |
2736 | 2620 |
2737 case op_el_mul_eq: | 2621 case op_el_mul_eq: |
2738 binop = op_el_mul; | 2622 return op_el_mul; |
2739 break; | |
2740 | 2623 |
2741 case op_el_div_eq: | 2624 case op_el_div_eq: |
2742 binop = op_el_div; | 2625 return op_el_div; |
2743 break; | |
2744 | 2626 |
2745 case op_el_ldiv_eq: | 2627 case op_el_ldiv_eq: |
2746 binop = op_el_ldiv; | 2628 return op_el_ldiv; |
2747 break; | |
2748 | 2629 |
2749 case op_el_pow_eq: | 2630 case op_el_pow_eq: |
2750 binop = op_el_pow; | 2631 return op_el_pow; |
2751 break; | |
2752 | 2632 |
2753 case op_el_and_eq: | 2633 case op_el_and_eq: |
2754 binop = op_el_and; | 2634 return op_el_and; |
2755 break; | |
2756 | 2635 |
2757 case op_el_or_eq: | 2636 case op_el_or_eq: |
2758 binop = op_el_or; | 2637 return op_el_or; |
2759 break; | |
2760 | 2638 |
2761 default: | 2639 default: |
2762 { | 2640 { |
2763 std::string on = assign_op_as_string (op); | 2641 std::string on = assign_op_as_string (op); |
2764 error ("operator %s: no binary operator found", on.c_str ()); | 2642 error ("operator %s: no binary operator found", on.c_str ()); |
2765 } | 2643 } |
2766 } | 2644 } |
2767 | |
2768 return binop; | |
2769 } | 2645 } |
2770 | 2646 |
2771 octave_value | 2647 octave_value |
2772 octave_value::empty_conv (const std::string& type, const octave_value& rhs) | 2648 octave_value::empty_conv (const std::string& type, const octave_value& rhs) |
2773 { | 2649 { |
2774 octave_value retval; | |
2775 | |
2776 if (type.length () > 0) | 2650 if (type.length () > 0) |
2777 { | 2651 { |
2778 switch (type[0]) | 2652 switch (type[0]) |
2779 { | 2653 { |
2780 case '(': | 2654 case '(': |
2781 { | 2655 if (type.length () > 1 && type[1] == '.') |
2782 if (type.length () > 1 && type[1] == '.') | 2656 return octave_map (); |
2783 retval = octave_map (); | 2657 else |
2784 else | 2658 return = octave_value (rhs.empty_clone ()); |
2785 retval = octave_value (rhs.empty_clone ()); | |
2786 } | |
2787 break; | |
2788 | 2659 |
2789 case '{': | 2660 case '{': |
2790 retval = Cell (); | 2661 return Cell (); |
2791 break; | |
2792 | 2662 |
2793 case '.': | 2663 case '.': |
2794 retval = octave_scalar_map (); | 2664 return octave_scalar_map (); |
2795 break; | |
2796 | 2665 |
2797 default: | 2666 default: |
2798 panic_impossible (); | 2667 panic_impossible (); |
2799 } | 2668 } |
2800 } | 2669 } |
2801 else | 2670 else |
2802 retval = octave_value (rhs.empty_clone ()); | 2671 return octave_value (rhs.empty_clone ()); |
2803 | |
2804 return retval; | |
2805 } | 2672 } |
2806 | 2673 |
2807 void | 2674 void |
2808 install_types (void) | 2675 install_types (void) |
2809 { | 2676 { |