TooN 2.1
|
00001 namespace TooN{ 00002 namespace Internal{ 00003 00004 ///@internal 00005 ///@brief A simple smart pointer type representing planar complex data. 00006 ///Not resizable. Also, only the minimum number of smart pointer 00007 ///functionality has been implemented to make Vector work. The class returns 00008 ///reference types, so it can represent mutable data. 00009 ///@ingroup gInternal 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