Mercurial > hg > octave-nkf
comparison src/ov-typeinfo.cc @ 9223:902a4597dce8
use Array<void *> in ov-typeinfo.h
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 20 May 2009 14:13:31 +0200 |
parents | 612918b993a0 |
children | cd96d29c5efa |
comparison
equal
deleted
inserted
replaced
9222:7bd406e12e4d | 9223:902a4597dce8 |
---|---|
38 | 38 |
39 #include <Array.h> | 39 #include <Array.h> |
40 #include <Array2.h> | 40 #include <Array2.h> |
41 #include <Array3.h> | 41 #include <Array3.h> |
42 | 42 |
43 #include <Array.cc> | |
44 | |
45 NO_INSTANTIATE_ARRAY_SORT (octave_value_typeinfo::unary_op_fcn); | |
46 INSTANTIATE_ARRAY (octave_value_typeinfo::unary_op_fcn, ); | |
47 template class Array2<octave_value_typeinfo::unary_op_fcn>; | |
48 | |
49 NO_INSTANTIATE_ARRAY_SORT (octave_value_typeinfo::non_const_unary_op_fcn); | |
50 INSTANTIATE_ARRAY (octave_value_typeinfo::non_const_unary_op_fcn, ); | |
51 template class Array2<octave_value_typeinfo::non_const_unary_op_fcn>; | |
52 | |
53 NO_INSTANTIATE_ARRAY_SORT (octave_value_typeinfo::binary_op_fcn); | |
54 INSTANTIATE_ARRAY (octave_value_typeinfo::binary_op_fcn, ); | |
55 template class Array2<octave_value_typeinfo::binary_op_fcn>; | |
56 template class Array3<octave_value_typeinfo::binary_op_fcn>; | |
57 | |
58 NO_INSTANTIATE_ARRAY_SORT (octave_value_typeinfo::cat_op_fcn); | |
59 INSTANTIATE_ARRAY (octave_value_typeinfo::cat_op_fcn, ); | |
60 template class Array2<octave_value_typeinfo::cat_op_fcn>; | |
61 | |
62 NO_INSTANTIATE_ARRAY_SORT (octave_value_typeinfo::assign_op_fcn); | |
63 INSTANTIATE_ARRAY (octave_value_typeinfo::assign_op_fcn, ); | |
64 template class Array2<octave_value_typeinfo::assign_op_fcn>; | |
65 template class Array3<octave_value_typeinfo::assign_op_fcn>; | |
66 | |
67 NO_INSTANTIATE_ARRAY_SORT (octave_value_typeinfo::assignany_op_fcn); | |
68 INSTANTIATE_ARRAY (octave_value_typeinfo::assignany_op_fcn, ); | |
69 template class Array2<octave_value_typeinfo::assignany_op_fcn>; | |
70 | |
71 NO_INSTANTIATE_ARRAY_SORT (octave_base_value::type_conv_fcn); | |
72 INSTANTIATE_ARRAY (octave_base_value::type_conv_fcn, ); | |
73 template class Array2<octave_base_value::type_conv_fcn>; | |
74 | |
75 bool | 43 bool |
76 octave_value_typeinfo::instance_ok (void) | 44 octave_value_typeinfo::instance_ok (void) |
77 { | 45 { |
78 bool retval = true; | 46 bool retval = true; |
79 if (! instance) | 47 if (! instance) |
227 | 195 |
228 types.resize (len, std::string ()); | 196 types.resize (len, std::string ()); |
229 | 197 |
230 vals.resize (len, octave_value ()); | 198 vals.resize (len, octave_value ()); |
231 | 199 |
232 unary_ops.resize (static_cast<int> (octave_value::num_unary_ops), | 200 unary_ops.resize (static_cast<int> (octave_value::num_unary_ops), len, 0); |
233 len, static_cast<octave_value_typeinfo::unary_op_fcn> (0)); | |
234 | 201 |
235 non_const_unary_ops.resize | 202 non_const_unary_ops.resize |
236 (static_cast<int> (octave_value::num_unary_ops), | 203 (static_cast<int> (octave_value::num_unary_ops), len, 0); |
237 len, static_cast<octave_value_typeinfo::non_const_unary_op_fcn> (0)); | |
238 | 204 |
239 binary_ops.resize (static_cast<int> (octave_value::num_binary_ops), | 205 binary_ops.resize (static_cast<int> (octave_value::num_binary_ops), |
240 len, len, static_cast<octave_value_typeinfo::binary_op_fcn> (0)); | 206 len, len, 0); |
241 | 207 |
242 compound_binary_ops.resize (static_cast<int> (octave_value::num_compound_binary_ops), | 208 compound_binary_ops.resize (static_cast<int> (octave_value::num_compound_binary_ops), |
243 len, len, static_cast<octave_value_typeinfo::binary_op_fcn> (0)); | 209 len, len, 0); |
244 | 210 |
245 cat_ops.resize (len, len, static_cast<octave_value_typeinfo::cat_op_fcn> (0)); | 211 cat_ops.resize (len, len, 0); |
246 | 212 |
247 assign_ops.resize (static_cast<int> (octave_value::num_assign_ops), | 213 assign_ops.resize (static_cast<int> (octave_value::num_assign_ops), len, len, 0); |
248 len, len, static_cast<octave_value_typeinfo::assign_op_fcn> (0)); | 214 |
249 | 215 assignany_ops.resize (static_cast<int> (octave_value::num_assign_ops), len, 0); |
250 assignany_ops.resize (static_cast<int> (octave_value::num_assign_ops), | |
251 len, static_cast<octave_value_typeinfo::assignany_op_fcn> (0)); | |
252 | 216 |
253 pref_assign_conv.resize (len, len, -1); | 217 pref_assign_conv.resize (len, len, -1); |
254 | 218 |
255 type_conv_ops.resize (len, len, static_cast<octave_base_value::type_conv_fcn> (0)); | 219 type_conv_ops.resize (len, len, 0); |
256 | 220 |
257 widening_ops.resize (len, len, static_cast<octave_base_value::type_conv_fcn> (0)); | 221 widening_ops.resize (len, len, 0); |
258 } | 222 } |
259 | 223 |
260 types (i) = t_name; | 224 types (i) = t_name; |
261 | 225 |
262 vals (i) = val; | 226 vals (i) = val; |
276 | 240 |
277 warning ("duplicate unary operator `%s' for class dispatch", | 241 warning ("duplicate unary operator `%s' for class dispatch", |
278 op_name.c_str ()); | 242 op_name.c_str ()); |
279 } | 243 } |
280 | 244 |
281 unary_class_ops.checkelem (static_cast<int> (op)) = f; | 245 unary_class_ops.checkelem (static_cast<int> (op)) = reinterpret_cast<void *> (f); |
282 | 246 |
283 return false; | 247 return false; |
284 } | 248 } |
285 | 249 |
286 bool | 250 bool |
294 | 258 |
295 warning ("duplicate unary operator `%s' for type `%s'", | 259 warning ("duplicate unary operator `%s' for type `%s'", |
296 op_name.c_str (), type_name.c_str ()); | 260 op_name.c_str (), type_name.c_str ()); |
297 } | 261 } |
298 | 262 |
299 unary_ops.checkelem (static_cast<int> (op), t) = f; | 263 unary_ops.checkelem (static_cast<int> (op), t) = reinterpret_cast<void *> (f); |
300 | 264 |
301 return false; | 265 return false; |
302 } | 266 } |
303 | 267 |
304 bool | 268 bool |
312 | 276 |
313 warning ("duplicate unary operator `%s' for type `%s'", | 277 warning ("duplicate unary operator `%s' for type `%s'", |
314 op_name.c_str (), type_name.c_str ()); | 278 op_name.c_str (), type_name.c_str ()); |
315 } | 279 } |
316 | 280 |
317 non_const_unary_ops.checkelem (static_cast<int> (op), t) = f; | 281 non_const_unary_ops.checkelem (static_cast<int> (op), t) = reinterpret_cast<void *> (f); |
318 | 282 |
319 return false; | 283 return false; |
320 } | 284 } |
321 | 285 |
322 bool | 286 bool |
329 | 293 |
330 warning ("duplicate binary operator `%s' for class dispatch", | 294 warning ("duplicate binary operator `%s' for class dispatch", |
331 op_name.c_str ()); | 295 op_name.c_str ()); |
332 } | 296 } |
333 | 297 |
334 binary_class_ops.checkelem (static_cast<int> (op)) = f; | 298 binary_class_ops.checkelem (static_cast<int> (op)) = reinterpret_cast<void *> (f); |
335 | 299 |
336 return false; | 300 return false; |
337 } | 301 } |
338 | 302 |
339 bool | 303 bool |
349 | 313 |
350 warning ("duplicate binary operator `%s' for types `%s' and `%s'", | 314 warning ("duplicate binary operator `%s' for types `%s' and `%s'", |
351 op_name.c_str (), t1_name.c_str (), t1_name.c_str ()); | 315 op_name.c_str (), t1_name.c_str (), t1_name.c_str ()); |
352 } | 316 } |
353 | 317 |
354 binary_ops.checkelem (static_cast<int> (op), t1, t2) = f; | 318 binary_ops.checkelem (static_cast<int> (op), t1, t2) = reinterpret_cast<void *> (f); |
355 | 319 |
356 return false; | 320 return false; |
357 } | 321 } |
358 | 322 |
359 bool | 323 bool |
366 | 330 |
367 warning ("duplicate compound binary operator `%s' for class dispatch", | 331 warning ("duplicate compound binary operator `%s' for class dispatch", |
368 op_name.c_str ()); | 332 op_name.c_str ()); |
369 } | 333 } |
370 | 334 |
371 compound_binary_class_ops.checkelem (static_cast<int> (op)) = f; | 335 compound_binary_class_ops.checkelem (static_cast<int> (op)) = reinterpret_cast<void *> (f); |
372 | 336 |
373 return false; | 337 return false; |
374 } | 338 } |
375 | 339 |
376 bool | 340 bool |
386 | 350 |
387 warning ("duplicate compound binary operator `%s' for types `%s' and `%s'", | 351 warning ("duplicate compound binary operator `%s' for types `%s' and `%s'", |
388 op_name.c_str (), t1_name.c_str (), t1_name.c_str ()); | 352 op_name.c_str (), t1_name.c_str (), t1_name.c_str ()); |
389 } | 353 } |
390 | 354 |
391 compound_binary_ops.checkelem (static_cast<int> (op), t1, t2) = f; | 355 compound_binary_ops.checkelem (static_cast<int> (op), t1, t2) = reinterpret_cast<void *> (f); |
392 | 356 |
393 return false; | 357 return false; |
394 } | 358 } |
395 | 359 |
396 bool | 360 bool |
403 | 367 |
404 warning ("duplicate concatenation operator for types `%s' and `%s'", | 368 warning ("duplicate concatenation operator for types `%s' and `%s'", |
405 t1_name.c_str (), t1_name.c_str ()); | 369 t1_name.c_str (), t1_name.c_str ()); |
406 } | 370 } |
407 | 371 |
408 cat_ops.checkelem (t1, t2) = f; | 372 cat_ops.checkelem (t1, t2) = reinterpret_cast<void *> (f); |
409 | 373 |
410 return false; | 374 return false; |
411 } | 375 } |
412 | 376 |
413 bool | 377 bool |
423 | 387 |
424 warning ("duplicate assignment operator `%s' for types `%s' and `%s'", | 388 warning ("duplicate assignment operator `%s' for types `%s' and `%s'", |
425 op_name.c_str (), t_lhs_name.c_str (), t_rhs_name.c_str ()); | 389 op_name.c_str (), t_lhs_name.c_str (), t_rhs_name.c_str ()); |
426 } | 390 } |
427 | 391 |
428 assign_ops.checkelem (static_cast<int> (op), t_lhs, t_rhs) = f; | 392 assign_ops.checkelem (static_cast<int> (op), t_lhs, t_rhs) = reinterpret_cast<void *> (f); |
429 | 393 |
430 return false; | 394 return false; |
431 } | 395 } |
432 | 396 |
433 bool | 397 bool |
441 | 405 |
442 warning ("duplicate assignment operator `%s' for types `%s'", | 406 warning ("duplicate assignment operator `%s' for types `%s'", |
443 op_name.c_str (), t_lhs_name.c_str ()); | 407 op_name.c_str (), t_lhs_name.c_str ()); |
444 } | 408 } |
445 | 409 |
446 assignany_ops.checkelem (static_cast<int> (op), t_lhs) = f; | 410 assignany_ops.checkelem (static_cast<int> (op), t_lhs) = reinterpret_cast<void *> (f); |
447 | 411 |
448 return false; | 412 return false; |
449 } | 413 } |
450 | 414 |
451 bool | 415 bool |
477 | 441 |
478 warning ("overriding type conversion op for `%s' to `%s'", | 442 warning ("overriding type conversion op for `%s' to `%s'", |
479 t_name.c_str (), t_result_name.c_str ()); | 443 t_name.c_str (), t_result_name.c_str ()); |
480 } | 444 } |
481 | 445 |
482 type_conv_ops.checkelem (t, t_result) = f; | 446 type_conv_ops.checkelem (t, t_result) = reinterpret_cast<void *> (f); |
483 | 447 |
484 return false; | 448 return false; |
485 } | 449 } |
486 | 450 |
487 bool | 451 bool |
495 | 459 |
496 warning ("overriding widening op for `%s' to `%s'", | 460 warning ("overriding widening op for `%s' to `%s'", |
497 t_name.c_str (), t_result_name.c_str ()); | 461 t_name.c_str (), t_result_name.c_str ()); |
498 } | 462 } |
499 | 463 |
500 widening_ops.checkelem (t, t_result) = f; | 464 widening_ops.checkelem (t, t_result) = reinterpret_cast<void *> (f); |
501 | 465 |
502 return false; | 466 return false; |
503 } | 467 } |
504 | 468 |
505 octave_value | 469 octave_value |
521 } | 485 } |
522 | 486 |
523 octave_value_typeinfo::unary_class_op_fcn | 487 octave_value_typeinfo::unary_class_op_fcn |
524 octave_value_typeinfo::do_lookup_unary_class_op (octave_value::unary_op op) | 488 octave_value_typeinfo::do_lookup_unary_class_op (octave_value::unary_op op) |
525 { | 489 { |
526 return unary_class_ops.checkelem (static_cast<int> (op)); | 490 void *f = unary_class_ops.checkelem (static_cast<int> (op)); |
491 return reinterpret_cast<octave_value_typeinfo::unary_class_op_fcn> (f); | |
527 } | 492 } |
528 | 493 |
529 octave_value_typeinfo::unary_op_fcn | 494 octave_value_typeinfo::unary_op_fcn |
530 octave_value_typeinfo::do_lookup_unary_op (octave_value::unary_op op, int t) | 495 octave_value_typeinfo::do_lookup_unary_op (octave_value::unary_op op, int t) |
531 { | 496 { |
532 return unary_ops.checkelem (static_cast<int> (op), t); | 497 void *f = unary_ops.checkelem (static_cast<int> (op), t); |
498 return reinterpret_cast<octave_value_typeinfo::unary_op_fcn> (f); | |
533 } | 499 } |
534 | 500 |
535 octave_value_typeinfo::non_const_unary_op_fcn | 501 octave_value_typeinfo::non_const_unary_op_fcn |
536 octave_value_typeinfo::do_lookup_non_const_unary_op | 502 octave_value_typeinfo::do_lookup_non_const_unary_op |
537 (octave_value::unary_op op, int t) | 503 (octave_value::unary_op op, int t) |
538 { | 504 { |
539 return non_const_unary_ops.checkelem (static_cast<int> (op), t); | 505 void *f = non_const_unary_ops.checkelem (static_cast<int> (op), t); |
506 return reinterpret_cast<octave_value_typeinfo::non_const_unary_op_fcn> (f); | |
540 } | 507 } |
541 | 508 |
542 octave_value_typeinfo::binary_class_op_fcn | 509 octave_value_typeinfo::binary_class_op_fcn |
543 octave_value_typeinfo::do_lookup_binary_class_op (octave_value::binary_op op) | 510 octave_value_typeinfo::do_lookup_binary_class_op (octave_value::binary_op op) |
544 { | 511 { |
545 return binary_class_ops.checkelem (static_cast<int> (op)); | 512 void *f = binary_class_ops.checkelem (static_cast<int> (op)); |
513 return reinterpret_cast<octave_value_typeinfo::binary_class_op_fcn> (f); | |
546 } | 514 } |
547 | 515 |
548 octave_value_typeinfo::binary_op_fcn | 516 octave_value_typeinfo::binary_op_fcn |
549 octave_value_typeinfo::do_lookup_binary_op (octave_value::binary_op op, | 517 octave_value_typeinfo::do_lookup_binary_op (octave_value::binary_op op, |
550 int t1, int t2) | 518 int t1, int t2) |
551 { | 519 { |
552 return binary_ops.checkelem (static_cast<int> (op), t1, t2); | 520 void *f = binary_ops.checkelem (static_cast<int> (op), t1, t2); |
521 return reinterpret_cast<octave_value_typeinfo::binary_op_fcn> (f); | |
553 } | 522 } |
554 | 523 |
555 octave_value_typeinfo::binary_class_op_fcn | 524 octave_value_typeinfo::binary_class_op_fcn |
556 octave_value_typeinfo::do_lookup_binary_class_op (octave_value::compound_binary_op op) | 525 octave_value_typeinfo::do_lookup_binary_class_op (octave_value::compound_binary_op op) |
557 { | 526 { |
558 return compound_binary_class_ops.checkelem (static_cast<int> (op)); | 527 void *f = compound_binary_class_ops.checkelem (static_cast<int> (op)); |
528 return reinterpret_cast<octave_value_typeinfo::binary_class_op_fcn> (f); | |
559 } | 529 } |
560 | 530 |
561 octave_value_typeinfo::binary_op_fcn | 531 octave_value_typeinfo::binary_op_fcn |
562 octave_value_typeinfo::do_lookup_binary_op (octave_value::compound_binary_op op, | 532 octave_value_typeinfo::do_lookup_binary_op (octave_value::compound_binary_op op, |
563 int t1, int t2) | 533 int t1, int t2) |
564 { | 534 { |
565 return compound_binary_ops.checkelem (static_cast<int> (op), t1, t2); | 535 void *f = compound_binary_ops.checkelem (static_cast<int> (op), t1, t2); |
536 return reinterpret_cast<octave_value_typeinfo::binary_op_fcn> (f); | |
566 } | 537 } |
567 | 538 |
568 octave_value_typeinfo::cat_op_fcn | 539 octave_value_typeinfo::cat_op_fcn |
569 octave_value_typeinfo::do_lookup_cat_op (int t1, int t2) | 540 octave_value_typeinfo::do_lookup_cat_op (int t1, int t2) |
570 { | 541 { |
571 return cat_ops.checkelem (t1, t2); | 542 void *f = cat_ops.checkelem (t1, t2); |
543 return reinterpret_cast<octave_value_typeinfo::cat_op_fcn> (f); | |
572 } | 544 } |
573 | 545 |
574 octave_value_typeinfo::assign_op_fcn | 546 octave_value_typeinfo::assign_op_fcn |
575 octave_value_typeinfo::do_lookup_assign_op (octave_value::assign_op op, | 547 octave_value_typeinfo::do_lookup_assign_op (octave_value::assign_op op, |
576 int t_lhs, int t_rhs) | 548 int t_lhs, int t_rhs) |
577 { | 549 { |
578 return assign_ops.checkelem (static_cast<int> (op), t_lhs, t_rhs); | 550 void *f = assign_ops.checkelem (static_cast<int> (op), t_lhs, t_rhs); |
551 return reinterpret_cast<octave_value_typeinfo::assign_op_fcn> (f); | |
579 } | 552 } |
580 | 553 |
581 octave_value_typeinfo::assignany_op_fcn | 554 octave_value_typeinfo::assignany_op_fcn |
582 octave_value_typeinfo::do_lookup_assignany_op (octave_value::assign_op op, | 555 octave_value_typeinfo::do_lookup_assignany_op (octave_value::assign_op op, |
583 int t_lhs) | 556 int t_lhs) |
584 { | 557 { |
585 return assignany_ops.checkelem (static_cast<int> (op), t_lhs); | 558 void *f = assignany_ops.checkelem (static_cast<int> (op), t_lhs); |
559 return reinterpret_cast<octave_value_typeinfo::assignany_op_fcn> (f); | |
586 } | 560 } |
587 | 561 |
588 int | 562 int |
589 octave_value_typeinfo::do_lookup_pref_assign_conv (int t_lhs, int t_rhs) | 563 octave_value_typeinfo::do_lookup_pref_assign_conv (int t_lhs, int t_rhs) |
590 { | 564 { |
592 } | 566 } |
593 | 567 |
594 octave_base_value::type_conv_fcn | 568 octave_base_value::type_conv_fcn |
595 octave_value_typeinfo::do_lookup_type_conv_op (int t, int t_result) | 569 octave_value_typeinfo::do_lookup_type_conv_op (int t, int t_result) |
596 { | 570 { |
597 return type_conv_ops.checkelem (t, t_result); | 571 void *f = type_conv_ops.checkelem (t, t_result); |
572 return reinterpret_cast<octave_base_value::type_conv_fcn> (f); | |
598 } | 573 } |
599 | 574 |
600 octave_base_value::type_conv_fcn | 575 octave_base_value::type_conv_fcn |
601 octave_value_typeinfo::do_lookup_widening_op (int t, int t_result) | 576 octave_value_typeinfo::do_lookup_widening_op (int t, int t_result) |
602 { | 577 { |
603 return widening_ops.checkelem (t, t_result); | 578 void *f = widening_ops.checkelem (t, t_result); |
579 return reinterpret_cast<octave_base_value::type_conv_fcn> (f); | |
604 } | 580 } |
605 | 581 |
606 string_vector | 582 string_vector |
607 octave_value_typeinfo::do_installed_type_names (void) | 583 octave_value_typeinfo::do_installed_type_names (void) |
608 { | 584 { |