Skip to content

Commit ce61880

Browse files
committed
Fix compiler warnings and errors related to recent changes (bug #67714)
* Change all instances of former 'abs' (replaced by 'mapper_abs') to 'std::abs' everywhere expect for the 'intNDArray' path. * Replace 'abs' with 'std::abs' in the 'mapper_abs' function to avoid clang compiler warnings and possible truncation of long long integers. * Add integer-specific functions for min/max and cummin/cummaxin in 'mx-inlines.cc' that do not have a nanflag path for speed improvement. The following files are changed: * intNDArray.cc : Add unused flag for nanflag argument and only forward the comparison method to the min/max and cummin/cummax ops. * mappers.h : Replace mapper_abs with std::abs on non-integer paths. * mx_inlines.cc (mx_inline_int*) : New *min/max/cummin/cummax functions.
1 parent 786053d commit ce61880

File tree

3 files changed

+764
-144
lines changed

3 files changed

+764
-144
lines changed

liboctave/array/intNDArray.cc

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -261,66 +261,62 @@ intNDArray<T>::sumsq (int dim) const
261261

262262
template <typename T>
263263
intNDArray<T>
264-
intNDArray<T>::max (int dim, bool nanflag, bool realabs) const
264+
intNDArray<T>::max (int dim, [[maybe_unused]] bool nanflag, bool realabs) const
265265
{
266-
return do_mx_minmax_op<T> (*this, dim, nanflag, realabs, mx_inline_max);
266+
return do_mx_minmax_op<T> (*this, dim, realabs, mx_inline_intmax);
267267
}
268268

269269
template <typename T>
270270
intNDArray<T>
271271
intNDArray<T>::max (Array<octave_idx_type>& idx_arg,
272-
int dim, bool nanflag, bool realabs) const
272+
int dim, [[maybe_unused]] bool nanflag, bool realabs) const
273273
{
274-
return do_mx_minmax_op<T> (*this, idx_arg, dim,
275-
nanflag, realabs, mx_inline_max);
274+
return do_mx_minmax_op<T> (*this, idx_arg, dim, realabs, mx_inline_intmax);
276275
}
277276

278277
template <typename T>
279278
intNDArray<T>
280-
intNDArray<T>::min (int dim, bool nanflag, bool realabs) const
279+
intNDArray<T>::min (int dim, [[maybe_unused]] bool nanflag, bool realabs) const
281280
{
282-
return do_mx_minmax_op<T> (*this, dim, nanflag, realabs, mx_inline_min);
281+
return do_mx_minmax_op<T> (*this, dim, realabs, mx_inline_intmin);
283282
}
284283

285284
template <typename T>
286285
intNDArray<T>
287286
intNDArray<T>::min (Array<octave_idx_type>& idx_arg,
288-
int dim, bool nanflag, bool realabs) const
287+
int dim, [[maybe_unused]] bool nanflag, bool realabs) const
289288
{
290-
return do_mx_minmax_op<T> (*this, idx_arg, dim,
291-
nanflag, realabs, mx_inline_min);
289+
return do_mx_minmax_op<T> (*this, idx_arg, dim, realabs, mx_inline_intmin);
292290
}
293291

294292
template <typename T>
295293
intNDArray<T>
296-
intNDArray<T>::cummax (int dim, bool nanflag, bool realabs) const
294+
intNDArray<T>::cummax (int dim, [[maybe_unused]] bool nanflag, bool realabs) const
297295
{
298-
return do_mx_cumminmax_op<T> (*this, dim, nanflag, realabs, mx_inline_cummax);
296+
return do_mx_cumminmax_op<T> (*this, dim, realabs, mx_inline_intcummax);
299297
}
300298

301299
template <typename T>
302300
intNDArray<T>
303301
intNDArray<T>::cummax (Array<octave_idx_type>& idx_arg,
304-
int dim, bool nanflag, bool realabs) const
302+
int dim, [[maybe_unused]] bool nanflag, bool realabs) const
305303
{
306-
return do_mx_cumminmax_op<T> (*this, idx_arg, dim, nanflag,
307-
realabs, mx_inline_cummax);
304+
return do_mx_cumminmax_op<T> (*this, idx_arg, dim, realabs, mx_inline_intcummax);
308305
}
309306

310307
template <typename T>
311308
intNDArray<T>
312-
intNDArray<T>::cummin (int dim, bool nanflag, bool realabs) const
309+
intNDArray<T>::cummin (int dim, [[maybe_unused]] bool nanflag, bool realabs) const
313310
{
314-
return do_mx_cumminmax_op<T> (*this, dim, nanflag, realabs, mx_inline_cummin);
311+
return do_mx_cumminmax_op<T> (*this, dim, realabs, mx_inline_intcummin);
315312
}
316313

317314
template <typename T>
318315
intNDArray<T>
319316
intNDArray<T>::cummin (Array<octave_idx_type>& idx_arg,
320-
int dim, bool nanflag, bool realabs) const
317+
int dim, [[maybe_unused]] bool nanflag, bool realabs) const
321318
{
322-
return do_mx_cumminmax_op<T> (*this, idx_arg, dim, nanflag,
323-
realabs, mx_inline_cummin);
319+
return do_mx_cumminmax_op<T> (*this, idx_arg, dim, realabs, mx_inline_intcummin);
324320
}
325321

326322
template <typename T>

liboctave/numeric/mappers.h

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,14 @@
3838

3939
// Provides some commonly repeated, basic loop templates.
4040

41-
template <typename T>
42-
inline auto mappers_abs (const T& x)
43-
{
44-
if constexpr (std::is_unsigned_v<T>)
45-
return x; // abs doesn't make sense for unsigned types
46-
else
47-
return std::abs(x);
48-
}
4941
// Specialization for octave_int types
5042
template <typename T>
5143
inline auto mappers_abs (const octave_int<T>& x)
5244
{
5345
if constexpr (std::is_unsigned_v<T>)
5446
return x; // abs doesn't make sense for unsigned types
5547
else
56-
return abs(x.value());
48+
return std::abs (x.value ());
5749
}
5850

5951

@@ -283,7 +275,7 @@ template <typename T>
283275
std::complex<T>
284276
signum (const std::complex<T>& x)
285277
{
286-
T tmp = mappers_abs (x);
278+
T tmp = std::abs (x);
287279

288280
return tmp == 0 ? 0.0 : x / tmp;
289281
}
@@ -524,7 +516,8 @@ min (float x, float y, const bool nanflag, const bool realabs)
524516
out = isnan (y) ? x : (x <= y ? x : y);
525517
else
526518
out = isnan (y) ? x :
527-
(std::abs (x) < std::abs (y) ? x : (std::abs (x) == std::abs (y) && x <= y ? x : y));
519+
(std::abs (x) < std::abs (y) ? x :
520+
(std::abs (x) == std::abs (y) && x <= y ? x : y));
528521
return out;
529522
}
530523

@@ -538,22 +531,23 @@ max (float x, float y, const bool nanflag, const bool realabs)
538531
out = isnan (y) ? x : (x >= y ? x : y);
539532
else
540533
out = isnan (y) ? x :
541-
(std::abs (x) > std::abs (y) ? x : (std::abs (x) == std::abs (y) && x >= y ? x : y));
534+
(std::abs (x) > std::abs (y) ? x :
535+
(std::abs (x) == std::abs (y) && x >= y ? x : y));
542536
return out;
543537
}
544538

545539
inline std::complex<double>
546540
min (const std::complex<double>& x, const std::complex<double>& y)
547541
{
548-
return isnan (y) ? x : (mappers_abs (x) < mappers_abs (y) ? x :
549-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) <= std::arg (y) ? x : y));
542+
return isnan (y) ? x : (std::abs (x) < std::abs (y) ? x :
543+
(std::abs (x) == std::abs (y) && std::arg (x) <= std::arg (y) ? x : y));
550544
}
551545

552546
inline std::complex<double>
553547
max (const std::complex<double>& x, const std::complex<double>& y)
554548
{
555-
return isnan (y) ? x : (mappers_abs (x) > mappers_abs (y) ? x :
556-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) >= std::arg (y) ? x : y));
549+
return isnan (y) ? x : (std::abs (x) > std::abs (y) ? x :
550+
(std::abs (x) == std::abs (y) && std::arg (x) >= std::arg (y) ? x : y));
557551
}
558552

559553
inline std::complex<double>
@@ -564,8 +558,8 @@ min (const std::complex<double>& x, const std::complex<double>& y,
564558
if (! nanflag && (isnan (x) || isnan (y)))
565559
out = NAN;
566560
else
567-
out = isnan (y) ? x : (mappers_abs (x) < mappers_abs (y) ? x :
568-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) <= std::arg (y) ? x : y));
561+
out = isnan (y) ? x : (std::abs (x) < std::abs (y) ? x :
562+
(std::abs (x) == std::abs (y) && std::arg (x) <= std::arg (y) ? x : y));
569563
return out;
570564
}
571565

@@ -577,8 +571,8 @@ max (const std::complex<double>& x, const std::complex<double>& y,
577571
if (! nanflag && (isnan (x) || isnan (y)))
578572
out = NAN;
579573
else
580-
out = isnan (y) ? x : (mappers_abs (x) > mappers_abs (y) ? x :
581-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) >= std::arg (y) ? x : y));
574+
out = isnan (y) ? x : (std::abs (x) > std::abs (y) ? x :
575+
(std::abs (x) == std::abs (y) && std::arg (x) >= std::arg (y) ? x : y));
582576
return out;
583577
}
584578

@@ -594,8 +588,8 @@ min (const std::complex<double>& x, const std::complex<double>& y,
594588
(std::real (x) == std::real (y) &&
595589
std::imag (x) <= std::imag (y) ? x : y));
596590
else
597-
out = isnan (y) ? x : (mappers_abs (x) < mappers_abs (y) ? x :
598-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) <= std::arg (y) ? x : y));
591+
out = isnan (y) ? x : (std::abs (x) < std::abs (y) ? x :
592+
(std::abs (x) == std::abs (y) && std::arg (x) <= std::arg (y) ? x : y));
599593
return out;
600594
}
601595

@@ -611,23 +605,23 @@ max (const std::complex<double>& x, const std::complex<double>& y,
611605
(std::real (x) == std::real (y) &&
612606
std::imag (x) >= std::imag (y) ? x : y));
613607
else
614-
out = isnan (y) ? x : (mappers_abs (x) > mappers_abs (y) ? x :
615-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) >= std::arg (y) ? x : y));
608+
out = isnan (y) ? x : (std::abs (x) > std::abs (y) ? x :
609+
(std::abs (x) == std::abs (y) && std::arg (x) >= std::arg (y) ? x : y));
616610
return out;
617611
}
618612

619613
inline std::complex<float>
620614
min (const std::complex<float>& x, const std::complex<float>& y)
621615
{
622616
return isnan (y) ? x : (abs (x) < abs (y) ? x :
623-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) <= std::arg (y) ? x : y));
617+
(std::abs (x) == std::abs (y) && std::arg (x) <= std::arg (y) ? x : y));
624618
}
625619

626620
inline std::complex<float>
627621
max (const std::complex<float>& x, const std::complex<float>& y)
628622
{
629623
return isnan (y) ? x : (abs (x) > abs (y) ? x :
630-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) >= std::arg (y) ? x : y));
624+
(std::abs (x) == std::abs (y) && std::arg (x) >= std::arg (y) ? x : y));
631625
}
632626

633627
inline std::complex<float>
@@ -638,8 +632,8 @@ min (const std::complex<float>& x, const std::complex<float>& y,
638632
if (! nanflag && (isnan (x) || isnan (y)))
639633
out = NAN;
640634
else
641-
out = isnan (y) ? x : (mappers_abs (x) < mappers_abs (y) ? x :
642-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) <= std::arg (y) ? x : y));
635+
out = isnan (y) ? x : (std::abs (x) < std::abs (y) ? x :
636+
(std::abs (x) == std::abs (y) && std::arg (x) <= std::arg (y) ? x : y));
643637
return out;
644638
}
645639

@@ -651,8 +645,8 @@ max (const std::complex<float>& x, const std::complex<float>& y,
651645
if (! nanflag && (isnan (x) || isnan (y)))
652646
out = NAN;
653647
else
654-
out = isnan (y) ? x : (mappers_abs (x) > mappers_abs (y) ? x :
655-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) >= std::arg (y) ? x : y));
648+
out = isnan (y) ? x : (std::abs (x) > std::abs (y) ? x :
649+
(std::abs (x) == std::abs (y) && std::arg (x) >= std::arg (y) ? x : y));
656650
return out;
657651
}
658652

@@ -668,8 +662,8 @@ min (const std::complex<float>& x, const std::complex<float>& y,
668662
(std::real (x) == std::real (y) &&
669663
std::imag (x) <= std::imag (y) ? x : y));
670664
else
671-
out = isnan (y) ? x : (mappers_abs (x) < mappers_abs (y) ? x :
672-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) <= std::arg (y) ? x : y));
665+
out = isnan (y) ? x : (std::abs (x) < std::abs (y) ? x :
666+
(std::abs (x) == std::abs (y) && std::arg (x) <= std::arg (y) ? x : y));
673667
return out;
674668
}
675669

@@ -685,8 +679,8 @@ max (const std::complex<float>& x, const std::complex<float>& y,
685679
(std::real (x) == std::real (y) &&
686680
std::imag (x) >= std::imag (y) ? x : y));
687681
else
688-
out = isnan (y) ? x : (mappers_abs (x) > mappers_abs (y) ? x :
689-
(mappers_abs (x) == mappers_abs (y) && std::arg (x) >= std::arg (y) ? x : y));
682+
out = isnan (y) ? x : (std::abs (x) > std::abs (y) ? x :
683+
(std::abs (x) == std::abs (y) && std::arg (x) >= std::arg (y) ? x : y));
690684
return out;
691685
}
692686

@@ -729,8 +723,8 @@ min (const octave_int<T>& x, const octave_int<T>& y,
729723
if (realabs)
730724
out = x.value () <= y.value () ? x : y;
731725
else
732-
out = mappers_abs (x.value ()) < mappers_abs (y.value ()) ? x :
733-
(mappers_abs (x.value ()) == mappers_abs (y.value ()) &&
726+
out = mappers_abs (x) < mappers_abs (y) ? x :
727+
(mappers_abs (x) == mappers_abs (y) &&
734728
x.value () <= y.value () ? x : y);
735729
return out;
736730
}
@@ -744,8 +738,8 @@ max (const octave_int<T>& x, const octave_int<T>& y,
744738
if (realabs)
745739
out = x.value () >= y.value () ? x : y;
746740
else
747-
out = mappers_abs (x.value ()) > mappers_abs (y.value ()) ? x :
748-
(mappers_abs (x.value ()) == mappers_abs (y.value ()) &&
741+
out = mappers_abs (x) > mappers_abs (y) ? x :
742+
(mappers_abs (x) == mappers_abs (y) &&
749743
x.value () >= y.value () ? x : y);
750744
return out;
751745
}

0 commit comments

Comments
 (0)