comparison libinterp/operators/ops.h @ 28630:35f974bab4c8

fix constness of cat op args Declare the first argument of the cat_op concatenation operators const. * ov-typeinfo.h (cat_op_fcn): Make first argument of concatenation operator typedef const. * op-b-sbm.cc, op-bm-sbm.cc, op-chm.cc, op-cm-scm.cc, op-cm-sm.cc, op-cs-scm.cc, op-cs-sm.cc, op-m-scm.cc, op-m-sm.cc, op-s-scm.cc, op-s-sm.cc, op-sbm-b.cc, op-sbm-bm.cc, op-scm-cm.cc, op-scm-cs.cc, op-scm-m.cc, op-scm-s.cc, op-sm-cm.cc, op-sm-cs.cc, op-sm-m.cc, op-sm-s.cc, op-struct.cc: Fix concatentation operator declarations and casts as needed. * ops.h (DEFCATOPX, DEFCATOP, DEFCATOP_FN, DEFNDCATOP_FN, DEFNDCHARCATOP_FN, DEFNDCATOP_FN2): Likewise.
author John W. Eaton <jwe@octave.org>
date Thu, 30 Jul 2020 16:15:03 -0400
parents bd51beb6205e
children 7854d5752dd2
comparison
equal deleted inserted replaced
28629:af361aea02e0 28630:35f974bab4c8
320 return octave_value (f (v1.CONCAT2 (e1, _value) (), v2.CONCAT2 (e2, _value) ())); \ 320 return octave_value (f (v1.CONCAT2 (e1, _value) (), v2.CONCAT2 (e2, _value) ())); \
321 } 321 }
322 322
323 #define DEFCATOPX(name, t1, t2) \ 323 #define DEFCATOPX(name, t1, t2) \
324 static octave_value \ 324 static octave_value \
325 CONCAT2 (oct_catop_, name) (octave_base_value&, const octave_base_value&, \ 325 CONCAT2 (oct_catop_, name) (const octave_base_value&, \
326 const octave_base_value&, \
326 const Array<octave_idx_type>& ra_idx) 327 const Array<octave_idx_type>& ra_idx)
327 328
328 #define DEFCATOP(name, t1, t2) \ 329 #define DEFCATOP(name, t1, t2) \
329 static octave_value \ 330 static octave_value \
330 CONCAT2 (oct_catop_, name) (octave_base_value& a1, \ 331 CONCAT2 (oct_catop_, name) (const octave_base_value& a1, \
331 const octave_base_value& a2, \ 332 const octave_base_value& a2, \
332 const Array<octave_idx_type>& ra_idx) 333 const Array<octave_idx_type>& ra_idx)
333 334
334 // FIXME: in some cases, the constructor isn't necessary. 335 // FIXME: in some cases, the constructor isn't necessary.
335 336
336 #define DEFCATOP_FN(name, t1, t2, f) \ 337 #define DEFCATOP_FN(name, t1, t2, f) \
337 static octave_value \ 338 static octave_value \
338 CONCAT2 (oct_catop_, name) (octave_base_value& a1, \ 339 CONCAT2 (oct_catop_, name) (const octave_base_value& a1, \
339 const octave_base_value& a2, \ 340 const octave_base_value& a2, \
340 const Array<octave_idx_type>& ra_idx) \ 341 const Array<octave_idx_type>& ra_idx) \
341 { \ 342 { \
342 CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \ 343 const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
343 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \ 344 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
344 \ 345 \
345 return octave_value (v1.CONCAT2 (t1, _value) () . f (v2.CONCAT2 (t2, _value) (), ra_idx)); \ 346 return octave_value (v1.CONCAT2 (t1, _value) () . f (v2.CONCAT2 (t2, _value) (), ra_idx)); \
346 } 347 }
347 348
348 #define DEFNDCATOP_FN(name, t1, t2, e1, e2, f) \ 349 #define DEFNDCATOP_FN(name, t1, t2, e1, e2, f) \
349 static octave_value \ 350 static octave_value \
350 CONCAT2 (oct_catop_, name) (octave_base_value& a1, \ 351 CONCAT2 (oct_catop_, name) (const octave_base_value& a1, \
351 const octave_base_value& a2, \ 352 const octave_base_value& a2, \
352 const Array<octave_idx_type>& ra_idx) \ 353 const Array<octave_idx_type>& ra_idx) \
353 { \ 354 { \
354 CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \ 355 const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
355 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \ 356 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
356 \ 357 \
357 return octave_value (v1.CONCAT2 (e1, _value) () . f (v2.CONCAT2 (e2, _value) (), ra_idx)); \ 358 return octave_value (v1.CONCAT2 (e1, _value) () . f (v2.CONCAT2 (e2, _value) (), ra_idx)); \
358 } 359 }
359 360
360 #define DEFNDCHARCATOP_FN(name, t1, t2, f) \ 361 #define DEFNDCHARCATOP_FN(name, t1, t2, f) \
361 static octave_value \ 362 static octave_value \
362 CONCAT2 (oct_catop_, name) (octave_base_value& a1, \ 363 CONCAT2 (oct_catop_, name) (const octave_base_value& a1, \
363 const octave_base_value& a2, \ 364 const octave_base_value& a2, \
364 const Array<octave_idx_type>& ra_idx) \ 365 const Array<octave_idx_type>& ra_idx) \
365 { \ 366 { \
366 CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \ 367 const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
367 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \ 368 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
368 \ 369 \
369 return octave_value (v1.char_array_value () . f (v2.char_array_value (), ra_idx), \ 370 return octave_value (v1.char_array_value () . f (v2.char_array_value (), ra_idx), \
370 ((a1.is_sq_string () || a2.is_sq_string ()) \ 371 ((a1.is_sq_string () || a2.is_sq_string ()) \
371 ? '\'' : '"')); \ 372 ? '\'' : '"')); \
374 // For compatibility, the second arg is always converted to the type 375 // For compatibility, the second arg is always converted to the type
375 // of the first. Hmm. 376 // of the first. Hmm.
376 377
377 #define DEFNDCATOP_FN2(name, t1, t2, tc1, tc2, e1, e2, f) \ 378 #define DEFNDCATOP_FN2(name, t1, t2, tc1, tc2, e1, e2, f) \
378 static octave_value \ 379 static octave_value \
379 CONCAT2 (oct_catop_, name) (octave_base_value& a1, \ 380 CONCAT2 (oct_catop_, name) (const octave_base_value& a1, \
380 const octave_base_value& a2, \ 381 const octave_base_value& a2, \
381 const Array<octave_idx_type>& ra_idx) \ 382 const Array<octave_idx_type>& ra_idx) \
382 { \ 383 { \
383 CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \ 384 const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
384 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \ 385 const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
385 \ 386 \
386 return octave_value (tc1 (v1.CONCAT2 (e1, _value) ()) . f (tc2 (v2.CONCAT2 (e2, _value) ()), ra_idx)); \ 387 return octave_value (tc1 (v1.CONCAT2 (e1, _value) ()) . f (tc2 (v2.CONCAT2 (e2, _value) ()), ra_idx)); \
387 } 388 }
388 389