[PATCH] fft-core.hpp minor cleanup

Nathan (Jasper) Myers ncm at codesourcery.com
Tue Sep 20 01:32:38 UTC 2005


The patch below is checked in.  It does some minor whitespace cleanup,
re-arranging, and comment improvements for better maintainability
in fft-core.hpp.  It doesn't matter much whether it ends up in the 
release.

Nathan Myers
ncm


Index: ChangeLog
===================================================================
RCS file: /home/cvs/Repository/vpp/ChangeLog,v
retrieving revision 1.263
retrieving revision 1.264
diff -u -p -r1.263 -r1.264
--- ChangeLog	20 Sep 2005 00:46:29 -0000	1.263
+++ ChangeLog	20 Sep 2005 01:29:43 -0000	1.264
@@ -1,5 +1,10 @@
 2005-09-19  Nathan Myers  <ncm at codesourcery.com>
 
+	* src/vsip/impl/fft-core.hpp: minor format cleanup, documentation
+	  improvements.
+
+2005-09-19  Nathan Myers  <ncm at codesourcery.com>
+
 	* configure.ac: replace all --enable-fftw* and --enable-ipp-fft with
 	  --with-fft={fftw3,fftw2-float,fftw2-double,fftw2-generic,ipp}.
 	  Enable building with fftw2-double.  Add --with-ipp-suffix, and 
Index: src/vsip/impl/fft-core.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/impl/fft-core.hpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -p -r1.15 -r1.16
--- src/vsip/impl/fft-core.hpp	19 Sep 2005 03:39:54 -0000	1.15
+++ src/vsip/impl/fft-core.hpp	20 Sep 2005 01:29:43 -0000	1.16
@@ -905,22 +905,10 @@ int_log2(unsigned size)    // assume siz
   return n;
 }
 
-template <typename P> inline IppStatus dum(P**, int, int, IppHintAlgorithm)
-  { return ippStsNoErr; }
-template <typename P> inline IppStatus dum(P**, int, int, int, IppHintAlgorithm)
-  { return ippStsNoErr; }
-template <typename P> inline IppStatus dum(P**, IppiSize, int, IppHintAlgorithm)
-  { return ippStsNoErr; }
-template <typename P> inline IppStatus dum(P*)
-  { return ippStsNoErr; }
-template <typename P> inline IppStatus dum(P const*, int*)
-  { return ippStsNoErr; }
-template <typename P, typename T> inline IppStatus dum(
-  T const*, T*, P const*, Ipp8u*)
-  { return ippStsNoErr; }
-template <typename P, typename T> inline IppStatus dum(
-  T const*, int, T*, int, P const*, Ipp8u*)
-  { return ippStsNoErr; }
+// Ipp_DFT_Base is the generic driver for all IPP calls.
+// 
+// Note the differing signatures for 2D plans in the FFT (power-of-two
+// array argument size) and DFT forms (non-), planFFun2 vs. planDFun2.
 
 template <
   vsip::dimension_type Dim,
@@ -933,8 +921,8 @@ template <
   IppStatus (*forwardFFun1)(T const*, T*, planFT const*, Ipp8u*),
   IppStatus (*inverseFFun1)(T const*, T*, planFT const*, Ipp8u*),
   IppStatus (*forwardFFun2)(T const*, int, T*, int, planFT const*, Ipp8u*),
-  IppStatus (*inverseFFun2)(T const*, int, T*, int, planFT const*, Ipp8u*),
-  typename planDT,
+  IppStatus (*inverseFFun2)
+    (T const*, int, T*, int, planFT const*, Ipp8u*), typename planDT,
   IppStatus (*planDFun1)(planDT**, int, int, IppHintAlgorithm),
   IppStatus (*planDFun2)(planDT**, IppiSize, int, IppHintAlgorithm),
   IppStatus (*disposeDFun)(planDT*),
@@ -1009,7 +997,8 @@ struct Ipp_DFT_base
   }
 
   static void
-  forward2(void* plan, void const* in, void* out, void* buffer, bool f) VSIP_NOTHROW
+  forward2(void* plan, void const* in, void* out, void* buffer, bool f)
+    VSIP_NOTHROW
   {
     IppStatus result = (f ?
       (*forwardFFun2)(
@@ -1024,7 +1013,8 @@ struct Ipp_DFT_base
   }
 
   static void
-  inverse(void* plan, void const* in, void* out, void* buffer, bool f) VSIP_NOTHROW
+  inverse(void* plan, void const* in, void* out, void* buffer, bool f)
+    VSIP_NOTHROW
   {
     IppStatus result = (f ?
       (*inverseFFun1)(
@@ -1039,7 +1029,8 @@ struct Ipp_DFT_base
   }
 
   static void
-  inverse2(void* plan, void const* in, void* out, void* buffer, bool f) VSIP_NOTHROW
+  inverse2(void* plan, void const* in, void* out, void* buffer, bool f)
+    VSIP_NOTHROW
   {
     IppStatus result = (f ?
       (*inverseFFun2)(
@@ -1054,10 +1045,34 @@ struct Ipp_DFT_base
   }
 };
 
+// These are dummy functions to act as place-holders for arguments to
+// template Ipp_DFT_base<>.
+
+template <typename P> inline IppStatus dum(P**, int, int, IppHintAlgorithm)
+  { return ippStsNoErr; }
+template <typename P> inline IppStatus dum(P**, int, int, int, IppHintAlgorithm)
+  { return ippStsNoErr; }
+template <typename P> inline IppStatus dum(P**, IppiSize, int, IppHintAlgorithm)
+  { return ippStsNoErr; }
+template <typename P> inline IppStatus dum(P*)
+  { return ippStsNoErr; }
+template <typename P> inline IppStatus dum(P const*, int*)
+  { return ippStsNoErr; }
+template <typename P, typename T> inline IppStatus dum(
+  T const*, T*, P const*, Ipp8u*)
+  { return ippStsNoErr; }
+template <typename P, typename T> inline IppStatus dum(
+  T const*, int, T*, int, P const*, Ipp8u*)
+  { return ippStsNoErr; }
+
+
+// Specializations of Ipp_DFT create the mappings from argument
+// types to the appropriate IPP library functions.  
+
 template <vsip::dimension_type Dim, typename T>
 struct Ipp_DFT;
 
-// 1D, C to C, float
+// IPP driver, 1D, C to C, float
 
 template <>
 struct Ipp_DFT<1,std::complex<float> >
@@ -1077,7 +1092,7 @@ struct Ipp_DFT<1,std::complex<float> >
    typedef std::complex<float> out_type;
 };
 
-// 2D, C to C, float
+// IPP driver, 2D, C to C, float
 
 template <>
 struct Ipp_DFT<2,std::complex<float> >
@@ -1097,7 +1112,7 @@ struct Ipp_DFT<2,std::complex<float> >
    typedef std::complex<float> out_type;
 };
 
-// 1D, C to C, double
+// IPP driver, 1D, C to C, double
 
 template <>
 struct Ipp_DFT<1,std::complex<double> >
@@ -1119,7 +1134,7 @@ struct Ipp_DFT<1,std::complex<double> >
 
 // 2D, C to C, double, power of 2
 
-// IPP has no 2D double 
+// IPP driver, IPP has no 2D double 
 template <>
 struct Ipp_DFT<2,std::complex<double> >
   : Ipp_DFT_base<2,Ipp64fc,void,dum,dum,dum,dum,dum,dum,dum,dum,
@@ -1132,7 +1147,7 @@ struct Ipp_DFT<2,std::complex<double> >
 
 /////////////////////////////////////////////////////////////////////////
 
-// 1D, R to/from C, float
+// IPP driver, 1D, R to/from C, float
 
 template <>
 struct Ipp_DFT<1,float>
@@ -1152,7 +1167,7 @@ struct Ipp_DFT<1,float>
    typedef std::complex<float> out_type;
 };
 
-// 2D, R to C, float
+// IPP driver, 2D, R to/from C, float
 
 template <>
 struct Ipp_DFT<2,float>
@@ -1172,7 +1187,7 @@ struct Ipp_DFT<2,float>
    typedef std::complex<float> out_type;
 };
 
-// 1D, R to C, double
+// IPP driver, 1D, R to/from C, double
 
 template <>
 struct Ipp_DFT<1,double>
@@ -1192,7 +1207,7 @@ struct Ipp_DFT<1,double>
    typedef std::complex<double> out_type;
 };
 
-// 2D, R to C, double
+// 2D, R to/from C, double
 
 // IPP doesn't implement 2D double
 template <>
@@ -1253,7 +1268,7 @@ create_ipp_plan(
   }
 }
 
-// IPP FFT any
+// IPP FFT plan any
 
 template <vsip::dimension_type Dim, typename T1, typename T2>
 inline void
@@ -1272,7 +1287,7 @@ create_plan(
 }
 
 
-// IPP FFTM
+// IPP FFTM plan
 
 template <typename T1, typename T2>
 inline void



More information about the vsipl++ mailing list