From c5ce7235ce2983a3b1e7b5144a7abedf1ba705cc Mon Sep 17 00:00:00 2001
From: Martin Reinecke <martin@mpa-garching.mpg.de>
Date: Wed, 24 Apr 2019 14:06:58 +0200
Subject: [PATCH] compactify

---
 pocketfft.cc | 42 ++++++++++--------------------------------
 1 file changed, 10 insertions(+), 32 deletions(-)

diff --git a/pocketfft.cc b/pocketfft.cc
index 80505b5..25bdf22 100644
--- a/pocketfft.cc
+++ b/pocketfft.cc
@@ -317,6 +317,8 @@ template<typename T> struct cmplx {
   T r, i;
   cmplx() {}
   cmplx(T r_, T i_) : r(r_), i(i_) {}
+  void Set(T r_, T i_) { r=r_; i=i_; }
+  void Set(T r_) { r=r_; i=T(0); }
   cmplx &operator+= (const cmplx &other)
     { r+=other.r; i+=other.i; return *this; }
   template<typename T2>cmplx &operator*= (T2 other)
@@ -2122,10 +2124,7 @@ template<typename T> void pocketfft_general_c(const shape_t &shape,
               : plan->backward((vtype *)tdatav, fct);
       for (size_t i=0; i<it_out.length(); ++i)
         for (size_t j=0; j<vlen; ++j)
-          {
-          data_out[p_o[j]+i*it_out.stride()].r = tdatav[i].r[j];
-          data_out[p_o[j]+i*it_out.stride()].i = tdatav[i].i[j];
-          }
+          data_out[p_o[j]+i*it_out.stride()].Set(tdatav[i].r[j],tdatav[i].i[j]);
       }
 #endif
     while (it_in.remaining()>0)
@@ -2251,28 +2250,19 @@ template<typename T> void pocketfft_general_r2c(const shape_t &shape,
         tdatav[i][j] = data_in[p_i[j]+i*it_in.stride()];
     plan.forward((vtype *)tdatav, fct);
     for (size_t j=0; j<vlen; ++j)
-      {
-      data_out[p_o[j]].r = tdatav[0][j];
-      data_out[p_o[j]].i = 0.;
-      }
+      data_out[p_o[j]].Set(tdatav[0][j]);
     size_t i;
     for (i=1; i<len-1; i+=2)
       {
       size_t io = (i+1)/2;
       for (size_t j=0; j<vlen; ++j)
-        {
-        data_out[p_o[j]+io*it_out.stride()].r = tdatav[i][j];
-        data_out[p_o[j]+io*it_out.stride()].i = tdatav[i+1][j];
-        }
+        data_out[p_o[j]+io*it_out.stride()].Set(tdatav[i][j], tdatav[i+1][j]);
       }
     if (i<len)
       {
       size_t io = (i+1)/2;
       for (size_t j=0; j<vlen; ++j)
-        {
-        data_out[p_o[j]+io*it_out.stride()].r = tdatav[i][j];
-        data_out[p_o[j]+io*it_out.stride()].i = 0.;
-        }
+        data_out[p_o[j]+io*it_out.stride()].Set(tdatav[i][j]);
       }
     }
 #endif
@@ -2283,21 +2273,12 @@ template<typename T> void pocketfft_general_r2c(const shape_t &shape,
     for (size_t i=0; i<len; ++i)
       tdata[i] = d_i[i*s_i];
     plan.forward(tdata, fct);
-    d_o[0].r = tdata[0];
-    d_o[0].i = 0.;
+    d_o[0].Set(tdata[0]);
     size_t i;
     for (i=1; i<len-1; i+=2)
-      {
-      size_t io = (i+1)/2;
-      d_o[io*s_o].r = tdata[i];
-      d_o[io*s_o].i = tdata[i+1];
-      }
+      d_o[((i+1)/2)*s_o].Set(tdata[i], tdata[i+1]);
     if (i<len)
-      {
-      size_t io = (i+1)/2;
-      d_o[io*s_o].r = tdata[i];
-      d_o[io*s_o].i = 0.;
-      }
+      d_o[((i+1)/2)*s_o].Set(tdata[i]);
     it_in.advance();
     it_out.advance();
     }
@@ -2364,10 +2345,7 @@ template<typename T> void pocketfft_general_c2r(const shape_t &shape_out,
       tdata[i+1] = d_i[ii*s_i].i;
       }
     if (i<len)
-      {
-      size_t ii = (i+1)/2;
-      tdata[i] = d_i[ii*s_i].r;
-      }
+      tdata[i] = d_i[((i+1)/2)*s_i].r;
     plan.backward(tdata, fct);
     for (size_t i=0; i<len; ++i)
       d_o[i*s_o] = tdata[i];
-- 
GitLab