From c2254461ae4756fba1ad7355a7535d7c6cfb70c9 Mon Sep 17 00:00:00 2001
From: Tobias Winchen <tobias.winchen@rwth-aachen.de>
Date: Thu, 16 Jan 2020 15:18:31 +0100
Subject: [PATCH] Fixed missing cmath header in recent compilers

---
 .../effelsberg/edd/src/EDDPolnMerge.cpp       | 22 +++++++++-------
 psrdada_cpp/effelsberg/edd/src/EDDRoach.cpp   | 16 +++++++-----
 .../effelsberg/edd/src/EDDRoach_merge.cpp     | 26 ++++++++++---------
 3 files changed, 35 insertions(+), 29 deletions(-)

diff --git a/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge.cpp b/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge.cpp
index 0521db77..0e561396 100644
--- a/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge.cpp
+++ b/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge.cpp
@@ -3,6 +3,8 @@
 #include <immintrin.h>
 #include <time.h>
 #include <iomanip>
+#include <cmath>
+
 namespace psrdada_cpp {
 namespace effelsberg {
 namespace edd {
@@ -31,8 +33,8 @@ namespace edd {
         if (block.used_bytes() > oblock.total_bytes())
 	{
 	    _writer.header_stream().release();
-	    throw std::runtime_error("Output DADA buffer does not have enough space for header");	 
-	} 
+	    throw std::runtime_error("Output DADA buffer does not have enough space for header");
+	}
         std::memcpy(oblock.ptr(), block.ptr(), block.used_bytes());
         char buffer[1024];
 	ascii_header_get(block.ptr(), "SAMPLE_CLOCK_START", "%s", buffer);
@@ -47,11 +49,11 @@ namespace edd {
 	BOOST_LOG_TRIVIAL(debug) << "this is sample_clock_start / sample_clock "<< sample_clock_start / sample_clock;
 	long double unix_time = sync_time + (sample_clock_start / sample_clock);
 	long double mjd_time = unix_time / 86400 - 40587.5;
-	char time_buffer[80];	
+	char time_buffer[80];
 	std::time_t unix_time_int;
 	struct std::tm * timeinfo;
 	double fractpart, intpart;
-	fractpart = modf (static_cast<double>(unix_time) , &intpart);
+	fractpart = std::modf (static_cast<double>(unix_time) , &intpart);
 	unix_time_int = static_cast<std::time_t>(intpart);
 	timeinfo = std::gmtime (&unix_time_int);
 	std::strftime(time_buffer, 80, "%Y-%m-%d-%H:%M:%S", timeinfo);
@@ -62,12 +64,12 @@ namespace edd {
         //utc_time_stamp<< time_buffer << "." <<fractpart;
 	utc_time_stamp<< time_buffer << "." << std::setw(10) << std::setfill('0') << std::size_t(fractpart*10000000000) << std::setfill(' ');
 	//BOOST_LOG_TRIVIAL(debug) << "fractional part" <<static_cast<std::size_t>(fractpart * 10000000000);
-	//utc_time_stamp<< time_buffer << "." << static_cast<std::size_t>(fractpart * 10000000000); 
+	//utc_time_stamp<< time_buffer << "." << static_cast<std::size_t>(fractpart * 10000000000);
 	BOOST_LOG_TRIVIAL(debug) << "this is start time in utc "<< utc_time_stamp.str().c_str()<< "\n";
 //	std::cout << "this is sync_time MJD "<< mjd_time<< "\n";
 	ascii_header_set(oblock.ptr(), "UTC_START", "%s", utc_time_stamp.str().c_str());
-	ascii_header_set(oblock.ptr(), "UNIX_TIME", "%Lf", unix_time);	
-	oblock.used_bytes(oblock.total_bytes()); 
+	ascii_header_set(oblock.ptr(), "UNIX_TIME", "%Lf", unix_time);
+	oblock.used_bytes(oblock.total_bytes());
         _writer.header_stream().release();
     }
 
@@ -85,7 +87,7 @@ namespace edd {
 **/
 	RawBytes& oblock = _writer.data_stream().next();
 
-        if (block.used_bytes() > oblock.total_bytes()) 
+        if (block.used_bytes() > oblock.total_bytes())
         {
 	    _writer.data_stream().release();
 	    throw std::runtime_error("Output DADA buffer does not match with the input dada buffer");
@@ -94,7 +96,7 @@ namespace edd {
 	uint32_t* S0 = reinterpret_cast<uint32_t*>(block.ptr());
         uint32_t* S1 = reinterpret_cast<uint32_t*>(block.ptr() + _nsamps_per_heap);
 	uint64_t* D = reinterpret_cast<uint64_t*>(oblock.ptr());
-	
+
 	for (std::size_t jj = 0; jj < nheap_groups; ++jj)
 		{
 		for (std::size_t ii = 0; ii < _nsamps_per_heap/sizeof(uint32_t); ++ii)
@@ -104,7 +106,7 @@ namespace edd {
 		S0 += _nsamps_per_heap/sizeof(uint32_t);
 		S1 += _nsamps_per_heap/sizeof(uint32_t);
 		}
-	
+
 	oblock.used_bytes(block.used_bytes());
 	_writer.data_stream().release();
         return false;
diff --git a/psrdada_cpp/effelsberg/edd/src/EDDRoach.cpp b/psrdada_cpp/effelsberg/edd/src/EDDRoach.cpp
index b3bbf0a7..9b1527c1 100644
--- a/psrdada_cpp/effelsberg/edd/src/EDDRoach.cpp
+++ b/psrdada_cpp/effelsberg/edd/src/EDDRoach.cpp
@@ -3,6 +3,8 @@
 #include <immintrin.h>
 #include <time.h>
 #include <iomanip>
+#include <cmath>
+
 namespace psrdada_cpp {
 namespace effelsberg {
 namespace edd {
@@ -31,8 +33,8 @@ namespace edd {
         if (block.used_bytes() > oblock.total_bytes())
 	{
 	    _writer.header_stream().release();
-	    throw std::runtime_error("Output DADA buffer does not have enough space for header");	 
-	} 
+	    throw std::runtime_error("Output DADA buffer does not have enough space for header");
+	}
         std::memcpy(oblock.ptr(), block.ptr(), block.used_bytes());
         char buffer[1024];
 	ascii_header_get(block.ptr(), "SAMPLE_CLOCK_START", "%s", buffer);
@@ -47,11 +49,11 @@ namespace edd {
 	BOOST_LOG_TRIVIAL(debug) << "this is sample_clock_start / sample_clock "<< sample_clock_start / sample_clock;
 	long double unix_time = sync_time + (sample_clock_start / sample_clock);
 	long double mjd_time = unix_time / 86400 - 40587.5;
-	char time_buffer[80];	
+	char time_buffer[80];
 	std::time_t unix_time_int;
 	struct std::tm * timeinfo;
 	double fractpart, intpart;
-	fractpart = modf (static_cast<double>(unix_time) , &intpart);
+	fractpart = std::modf (static_cast<double>(unix_time) , &intpart);
 	unix_time_int = static_cast<std::time_t>(intpart);
 	timeinfo = std::gmtime (&unix_time_int);
 	std::strftime(time_buffer, 80, "%Y-%m-%d-%H:%M:%S", timeinfo);
@@ -62,12 +64,12 @@ namespace edd {
         //utc_time_stamp<< time_buffer << "." <<fractpart;
 	utc_time_stamp<< time_buffer << "." << std::setw(10) << std::setfill('0') << std::size_t(fractpart*10000000000) << std::setfill(' ');
 	//BOOST_LOG_TRIVIAL(debug) << "fractional part" <<static_cast<std::size_t>(fractpart * 10000000000);
-	//utc_time_stamp<< time_buffer << "." << static_cast<std::size_t>(fractpart * 10000000000); 
+	//utc_time_stamp<< time_buffer << "." << static_cast<std::size_t>(fractpart * 10000000000);
 	BOOST_LOG_TRIVIAL(info) << "this is start time in utc "<< utc_time_stamp.str().c_str()<< "\n";
 //	std::cout << "this is sync_time MJD "<< mjd_time<< "\n";
 	ascii_header_set(oblock.ptr(), "UTC_START", "%s", utc_time_stamp.str().c_str());
-	ascii_header_set(oblock.ptr(), "UNIX_TIME", "%Lf", unix_time);	
-	oblock.used_bytes(oblock.total_bytes()); 
+	ascii_header_set(oblock.ptr(), "UNIX_TIME", "%Lf", unix_time);
+	oblock.used_bytes(oblock.total_bytes());
         _writer.header_stream().release();
     }
 
diff --git a/psrdada_cpp/effelsberg/edd/src/EDDRoach_merge.cpp b/psrdada_cpp/effelsberg/edd/src/EDDRoach_merge.cpp
index bdd9c543..42c912b1 100644
--- a/psrdada_cpp/effelsberg/edd/src/EDDRoach_merge.cpp
+++ b/psrdada_cpp/effelsberg/edd/src/EDDRoach_merge.cpp
@@ -3,6 +3,8 @@
 #include <immintrin.h>
 #include <time.h>
 #include <iomanip>
+#include <cmath>
+
 namespace psrdada_cpp {
 namespace effelsberg {
 namespace edd {
@@ -31,8 +33,8 @@ namespace edd {
         if (block.used_bytes() > oblock.total_bytes())
 	{
 	    _writer.header_stream().release();
-	    throw std::runtime_error("Output DADA buffer does not have enough space for header");	 
-	} 
+	    throw std::runtime_error("Output DADA buffer does not have enough space for header");
+	}
         std::memcpy(oblock.ptr(), block.ptr(), block.used_bytes());
         char buffer[1024];
 	ascii_header_get(block.ptr(), "SAMPLE_CLOCK_START", "%s", buffer);
@@ -47,11 +49,11 @@ namespace edd {
 	BOOST_LOG_TRIVIAL(debug) << "this is sample_clock_start / sample_clock "<< sample_clock_start / sample_clock;
 	long double unix_time = sync_time + (sample_clock_start / sample_clock);
 	long double mjd_time = unix_time / 86400 - 40587.5;
-	char time_buffer[80];	
+	char time_buffer[80];
 	std::time_t unix_time_int;
 	struct std::tm * timeinfo;
 	double fractpart, intpart;
-	fractpart = modf (static_cast<double>(unix_time) , &intpart);
+	fractpart = std::modf (static_cast<double>(unix_time) , &intpart);
 	unix_time_int = static_cast<std::time_t>(intpart);
 	timeinfo = std::gmtime (&unix_time_int);
 	std::strftime(time_buffer, 80, "%Y-%m-%d-%H:%M:%S", timeinfo);
@@ -62,18 +64,18 @@ namespace edd {
         //utc_time_stamp<< time_buffer << "." <<fractpart;
 	utc_time_stamp<< time_buffer << "." << std::setw(10) << std::setfill('0') << std::size_t(fractpart*10000000000) << std::setfill(' ');
 	//BOOST_LOG_TRIVIAL(debug) << "fractional part" <<static_cast<std::size_t>(fractpart * 10000000000);
-	//utc_time_stamp<< time_buffer << "." << static_cast<std::size_t>(fractpart * 10000000000); 
+	//utc_time_stamp<< time_buffer << "." << static_cast<std::size_t>(fractpart * 10000000000);
 	BOOST_LOG_TRIVIAL(info) << "this is start time in utc "<< utc_time_stamp.str().c_str()<< "\n";
 //	std::cout << "this is sync_time MJD "<< mjd_time<< "\n";
 	ascii_header_set(oblock.ptr(), "UTC_START", "%s", utc_time_stamp.str().c_str());
-	ascii_header_set(oblock.ptr(), "UNIX_TIME", "%Lf", unix_time);	
-	oblock.used_bytes(oblock.total_bytes()); 
+	ascii_header_set(oblock.ptr(), "UNIX_TIME", "%Lf", unix_time);
+	oblock.used_bytes(oblock.total_bytes());
         _writer.header_stream().release();
     }
 
     bool EDDRoach_merge::operator()(RawBytes& block)
     {
-	BOOST_LOG_TRIVIAL(info) << "nchucnk "<< _nchunck << "\n";	
+	BOOST_LOG_TRIVIAL(info) << "nchucnk "<< _nchunck << "\n";
 	RawBytes& oblock = _writer.data_stream().next();
         std::size_t bytes_per_chunk= 32;
         std::size_t heap_size = 262144;
@@ -85,20 +87,20 @@ namespace edd {
 		for (std::size_t ii=0; ii<_nchunck; ++ii)
 		{
 	    		ptrs[ii] = block.ptr() + xx * nbands * heap_size + ii * heap_size;
-		} 
+		}
        		const char *target = oblock.ptr() + xx * nbands * heap_size;
 
         	for (std::size_t yy=0; yy< heap_size/bytes_per_chunk; yy++)
-        	{	
+        	{
             		for (std::size_t ii=0; ii<_nchunck; ++ii)
 			{
             	    		std::memcpy((void*)target, (void*)ptrs[ii], bytes_per_chunk);
             	    		ptrs[ii] += bytes_per_chunk;
-                    		target += bytes_per_chunk;	
+                    		target += bytes_per_chunk;
 			}
         	}
         }
-	
+
 	//std::memcpy(oblock.ptr(), block.ptr(), block.used_bytes());
 	oblock.used_bytes(block.used_bytes());
 	_writer.data_stream().release();
-- 
GitLab