[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