00001 namespace TooN{
00002 namespace Internal{
00003
00004
00005
00006
00007
00008
00009
00010 template<class Precision> struct PointerToPlanarComplex;
00011 template<class Precision> struct PointerToPlanarComplex<std::complex<Precision> >
00012 {
00013 const Precision* const re;
00014 const Precision* const im;
00015
00016 PointerToPlanarComplex(std::pair<Precision*, Precision*> d)
00017 :re(d.first),im(d.second)
00018 {}
00019
00020 PointerToPlanarComplex(std::pair<const Precision*, const Precision*> d)
00021 :re(d.first),im(d.second)
00022 {}
00023
00024 PointerToPlanarComplex<std::complex<Precision> > operator+(int i) const
00025 {
00026 return PointerToPlanarComplex<std::complex<Precision> >(std::make_pair(re+i, im+i));
00027 }
00028
00029 const std::complex<Precision> operator[](int i) const
00030 {
00031 return std::complex<Precision>(re[i], im[i]);
00032 }
00033
00034 };
00035 }
00036
00037
00038 struct ReferencePlanarComplex
00039 {
00040 template<int Size, typename Precision>
00041 struct VLayout;
00042
00043 template<int Size, typename Precision>
00044 struct VLayout<Size, std::complex<Precision> >:
00045 public Internal::GenericVBase<Size, std::complex<Precision>, 1, Internal::VectorSlice<Size, std::complex<Precision>, Internal::PointerToPlanarComplex<std::complex<double> >,
00046 Internal::PointerToPlanarComplex<std::complex<double> >,
00047 const std::complex<double>,
00048 const std::complex<double> > >
00049 {
00050 VLayout(Internal::PointerToPlanarComplex<std::complex<Precision> > p, int sz=0)
00051 :Internal::GenericVBase<Size, std::complex<Precision>, 1, Internal::VectorSlice<Size, std::complex<Precision>, Internal::PointerToPlanarComplex<std::complex<double> >,
00052 Internal::PointerToPlanarComplex<std::complex<double> >,
00053 const std::complex<double>,
00054 const std::complex<double> > >(p, sz, 1)
00055 {}
00056
00057
00058 };
00059
00060 };
00061 }
00062