// arch-tag: c37e27e4-7260-43fd-924e-acd094f98e0e /* * (C) Copyright Neal D. Becker (2004) * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */ #ifndef complex_adapt_hpp #define complex_adapt_hpp #include #include #include namespace boost { /*! Iterate over the real part of a complex sequence from a sequence z, returns real(z[i]), real(z[i+1])... */ template class complex_real_adapt : public boost::iterator_adaptor< complex_real_adapt, BaseIterator, typename std::iterator_traits::value_type::value_type // scalar type > { friend class iterator_core_access; public: typedef typename boost::iterator_adaptor< complex_real_adapt, BaseIterator, typename std::iterator_traits::value_type::value_type > super_t; typedef typename std::iterator_traits::value_type complex_type; typedef typename complex_type::value_type scalar_type; complex_real_adapt() {} explicit complex_real_adapt (BaseIterator _base) : super_t (_base) {} scalar_type & dereference() const { return real (const_cast(*this->base_reference())); } }; template complex_real_adapt make_complex_real_adapt(BaseIterator const& begin) { return complex_real_adapt (begin); } /*! Iterate over the imag part of a complex sequence from a sequence z, returns imag(z[i]), imag(z[i+1])... */ template class complex_imag_adapt : public boost::iterator_adaptor< complex_imag_adapt, BaseIterator, typename std::iterator_traits::value_type::value_type // scalar type > { friend class iterator_core_access; public: typedef typename boost::iterator_adaptor< complex_imag_adapt, BaseIterator, typename std::iterator_traits::value_type::value_type > super_t; typedef typename std::iterator_traits::value_type complex_type; typedef typename complex_type::value_type scalar_type; complex_imag_adapt() {} explicit complex_imag_adapt (BaseIterator _base) : super_t (_base) {} scalar_type & dereference() const { return imag (const_cast(*this->base_reference())); } }; template complex_imag_adapt make_complex_imag_adapt(BaseIterator const& begin) { return complex_imag_adapt (begin); } } // namespace boost #endif