From e23e5c4ee95d683e5b701037ade19ee97076793b Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <dijkema@astron.nl>
Date: Wed, 13 Jan 2016 15:47:22 +0000
Subject: [PATCH] Task #8973: fix compile errors with c++11

---
 .../BBSKernel/include/BBSKernel/EstimateUtil.h         |  4 +++-
 CEP/DP3/AOFlagger/src/msio/image2d.cpp                 |  5 +++--
 .../src/strategy/algorithms/highpassfilter.cpp         |  7 ++++---
 CEP/PyBDSM/src/c++/MGFunction1.cc                      | 10 +++++-----
 CEP/PyBDSM/src/c++/MGFunction2.cc                      |  4 ++--
 CEP/PyBDSM/src/c++/stat.cc                             |  4 ++--
 6 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/CEP/Calibration/BBSKernel/include/BBSKernel/EstimateUtil.h b/CEP/Calibration/BBSKernel/include/BBSKernel/EstimateUtil.h
index 3b7860f8131..f1b1e0bf33a 100644
--- a/CEP/Calibration/BBSKernel/include/BBSKernel/EstimateUtil.h
+++ b/CEP/Calibration/BBSKernel/include/BBSKernel/EstimateUtil.h
@@ -35,6 +35,8 @@
 #include <Common/lofar_vector.h>
 #include <Common/Timer.h>
 
+#include <cmath>
+
 #include <scimath/Fitting/LSQFit.h>
 
 //# For the definition of SolverOptions...
@@ -467,7 +469,7 @@ T storeCoeff(const Location &cell, const ParmGroup &solvables, T first)
 template <typename T>
 inline bool isfinite(T x)
 {
-    return !isnan(x) && !isinf(x);
+    return !std::isnan(x) && !std::isinf(x);
 }
 
 // @}
diff --git a/CEP/DP3/AOFlagger/src/msio/image2d.cpp b/CEP/DP3/AOFlagger/src/msio/image2d.cpp
index 45078dafb74..b7f8c8ca296 100644
--- a/CEP/DP3/AOFlagger/src/msio/image2d.cpp
+++ b/CEP/DP3/AOFlagger/src/msio/image2d.cpp
@@ -22,6 +22,7 @@
 #include <AOFlagger/msio/fitsfile.h>
 
 #include <algorithm>
+#include <cmath>
 #include <limits>
 
 #include <iostream>
@@ -182,7 +183,7 @@ num_t Image2D::GetMaximumFinite() const {
 	for(size_t y=0;y<_height;++y)
 	{
 		for(size_t x=0;x<_width;++x) {
-			if(isfinite(_dataPtr[y][x]) && _dataPtr[y][x] > max) {
+			if (std::isfinite(_dataPtr[y][x]) && _dataPtr[y][x] > max) {
 				max = _dataPtr[y][x];
 			}
 		}
@@ -195,7 +196,7 @@ num_t Image2D::GetMinimumFinite() const {
 	for(size_t y=0;y<_height;++y)
 	{
 		for(size_t x=0;x<_width;++x) {
-			if(isfinite(_dataPtr[y][x]) && _dataPtr[y][x] < min) {
+			if(std::isfinite(_dataPtr[y][x]) && _dataPtr[y][x] < min) {
 				min = _dataPtr[y][x];
 			}
 		}
diff --git a/CEP/DP3/AOFlagger/src/strategy/algorithms/highpassfilter.cpp b/CEP/DP3/AOFlagger/src/strategy/algorithms/highpassfilter.cpp
index 301d8a76945..02a09ac9367 100644
--- a/CEP/DP3/AOFlagger/src/strategy/algorithms/highpassfilter.cpp
+++ b/CEP/DP3/AOFlagger/src/strategy/algorithms/highpassfilter.cpp
@@ -3,6 +3,7 @@
 
 #include <AOFlagger/strategy/algorithms/highpassfilter.h>
 #include <AOFlagger/util/rng.h>
+#include <cmath>
 
 HighPassFilter::~HighPassFilter()
 {
@@ -162,7 +163,7 @@ void HighPassFilter::setFlaggedValuesToZeroAndMakeWeights(const Image2DCPtr &inp
 	{
 		for(size_t x=0;x<width;++x)
 		{
-			if(inputMask->Value(x, y) || !isfinite(inputImage->Value(x, y)))
+			if(inputMask->Value(x, y) || !std::isfinite(inputImage->Value(x, y)))
 			{
 				outputImage->SetValue(x, y, 0.0);
 				weightsOutput->SetValue(x, y, 0.0);
@@ -193,8 +194,8 @@ void HighPassFilter::setFlaggedValuesToZeroAndMakeWeightsSSE(const Image2DCPtr &
 			// Assign each integer to one bool in the mask
 			// Convert false to 0xFFFFFFFF and true to 0
 			__m128 conditionMask = _mm_castsi128_ps(
-				_mm_cmpeq_epi32(_mm_set_epi32(rowPtr[3] || !isfinite(inputPtr[3]), rowPtr[2] || !isfinite(inputPtr[2]),
-																			rowPtr[1] || !isfinite(inputPtr[1]), rowPtr[0] || !isfinite(inputPtr[0])),
+				_mm_cmpeq_epi32(_mm_set_epi32(rowPtr[3] || !std::isfinite(inputPtr[3]), rowPtr[2] || !std::isfinite(inputPtr[2]),
+																			rowPtr[1] || !std::isfinite(inputPtr[1]), rowPtr[0] || !std::isfinite(inputPtr[0])),
 												zero4i));
 			
 			_mm_store_ps(weightsPtr, _mm_or_ps(
diff --git a/CEP/PyBDSM/src/c++/MGFunction1.cc b/CEP/PyBDSM/src/c++/MGFunction1.cc
index bdfab91b1e8..b37c5a41018 100644
--- a/CEP/PyBDSM/src/c++/MGFunction1.cc
+++ b/CEP/PyBDSM/src/c++/MGFunction1.cc
@@ -106,7 +106,7 @@ void MGFunction::py_remove_gaussian(int idx)
 //
 // Get gaussian parameters by index
 //
-tuple MGFunction::py_get_gaussian(int idx)
+boost::python::tuple MGFunction::py_get_gaussian(int idx)
 {
   if (idx < 0)
     idx += m_gaul.size();
@@ -116,7 +116,7 @@ tuple MGFunction::py_get_gaussian(int idx)
 
   vector<double> &p = m_parameters[idx];
 
-  return make_tuple(p[0], p[1], p[2], p[3], p[4], p[5]);
+  return boost::python::make_tuple(p[0], p[1], p[2], p[3], p[4], p[5]);
 }
 
 //
@@ -171,7 +171,7 @@ list MGFunction::py_get_errors()
 
   for (unsigned i = 0; i < m_gaul.size(); ++i) {
     vector<double> &e = m_errors[i];
-    res.append(make_tuple(e[0], e[1], e[2], e[3], e[4], e[5]));
+    res.append(boost::python::make_tuple(e[0], e[1], e[2], e[3], e[4], e[5]));
   }
 
   return res;
@@ -180,7 +180,7 @@ list MGFunction::py_get_errors()
 //
 // Find highest peak in the data-MGFunction residual
 //
-tuple MGFunction::py_find_peak()
+boost::python::tuple MGFunction::py_find_peak()
 {
   vector<double> buf(data_size());
   fcn_diff(&buf.front());
@@ -197,7 +197,7 @@ tuple MGFunction::py_find_peak()
   int x1 = mm_data[pidx].x1;
   int x2 = mm_data[pidx].x2;
 
-  return make_tuple(peak, make_tuple(x1, x2));
+  return boost::python::make_tuple(peak, make_tuple(x1, x2));
 }
 
 
diff --git a/CEP/PyBDSM/src/c++/MGFunction2.cc b/CEP/PyBDSM/src/c++/MGFunction2.cc
index aff1746c201..4417d0a0bb5 100644
--- a/CEP/PyBDSM/src/c++/MGFunction2.cc
+++ b/CEP/PyBDSM/src/c++/MGFunction2.cc
@@ -35,13 +35,13 @@ and parameters under exponents (NL_ij) are non-linear.
 #include "boost_python.h"
 #include "MGFunction.h"
    
-#if defined(__GLIBCXX__)
+#if defined(__GLIBCXX__) and __cplusplus <= 199711L
 #include <ext/algorithm>
 #endif
 #include <num_util/num_util.h>
 #include <cfloat>
 
-#if not(defined(_LIBCPP_VERSION))
+#if not(defined(_LIBCPP_VERSION)) and __cplusplus <= 199711L
 using namespace __gnu_cxx;
 #endif
 using namespace std;
diff --git a/CEP/PyBDSM/src/c++/stat.cc b/CEP/PyBDSM/src/c++/stat.cc
index 15ef128032e..1220a250ed9 100644
--- a/CEP/PyBDSM/src/c++/stat.cc
+++ b/CEP/PyBDSM/src/c++/stat.cc
@@ -229,7 +229,7 @@ static object _bstat(numeric::array arr, object mask, double kappa)
  /* py_assert(res.second == dev.back(),
 	    PyExc_RuntimeError, "clipped rRMS calculation does not converge"); */
 
-  return make_tuple(mean[1], dev[1], mean.back(), dev.back(), cnt);
+  return boost::python::make_tuple(mean[1], dev[1], mean.back(), dev.back(), cnt);
 }
 
 object bstat(numeric::array arr, object mask, double kappa)
@@ -264,5 +264,5 @@ object bstat(numeric::array arr, object mask, double kappa)
  fail:
   py_assert(false, 
 	    PyExc_RuntimeError, "bstat dispatch failed: not implemented for this datatype/layout");
-  return tuple(); // this is fake return-statement to silence the compiler
+  return boost::python::tuple(); // this is fake return-statement to silence the compiler
 }
-- 
GitLab