#ifndef __multi_array_h #define __multi_array_h #include "config.h" #include namespace boost { /*! \brief Assignable version of Boost MultiArray. \author Johann Briffa \par Version Control: - $Revision: 1488 $ - $Date: 2008-07-11 10:35:16 +0100 (Fri, 11 Jul 2008) $ - $Author: jabriffa $ */ template class assignable_multi_array : public multi_array { public: /*! \name Constructors / Destructors */ explicit assignable_multi_array() : multi_array() {}; explicit assignable_multi_array(const detail::multi_array::extent_gen& ranges) : multi_array(ranges) {}; explicit assignable_multi_array(const assignable_multi_array& x) : multi_array(dynamic_cast< const multi_array& >(x)) {}; // @} /*! \name Assignment */ assignable_multi_array& operator=(const assignable_multi_array& x) { if(!std::equal(this->shape(), this->shape()+this->num_dimensions(), x.shape())) { resize(x.extents()); for(std::size_t i=0; i& >(*this) = dynamic_cast< const multi_array& >(x); return *this; } // @} /*! \name Informative functions */ /*! \brief Get array extents description Returns an object describing the array extents, in a format suitable for use with resize(). */ detail::multi_array::extent_gen extents() const { typedef typename multi_array::extent_range extent_range; detail::multi_array::extent_gen extents_list; for(std::size_t i=0; iindex_bases()[i], this->index_bases()[i]+this->shape()[i]); libbase::trace << "Input Extent " << i << " = " << this->shape()[i] << "\n"; } return extents_list; } // @} }; }; // end namespace #endif