1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Copyright 2002 The Trustees of Indiana University.
- // Use, modification and distribution is subject to the Boost Software
- // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- // Boost.MultiArray Library
- // Authors: Ronald Garcia
- // Jeremy Siek
- // Andrew Lumsdaine
- // See http://www.boost.org/libs/multi_array for documentation.
- #ifndef BOOST_MULTI_ARRAY_COPY_ARRAY_HPP
- #define BOOST_MULTI_ARRAY_COPY_ARRAY_HPP
- //
- // copy_array.hpp - generic code for copying the contents of one
- // Basic_MultiArray to another. We assume that they are of the same
- // shape
- //
- #include "boost/type.hpp"
- #include "boost/assert.hpp"
- namespace boost {
- namespace detail {
- namespace multi_array {
- template <typename Element>
- class copy_dispatch {
- public:
- template <typename SourceIterator, typename DestIterator>
- static void copy_array (SourceIterator first, SourceIterator last,
- DestIterator result) {
- while (first != last) {
- copy_array(*first++,*result++);
- }
- }
- private:
- // Array2 has to be passed by VALUE here because subarray
- // pseudo-references are temporaries created by iterator::operator*()
- template <typename Array1, typename Array2>
- static void copy_array (const Array1& source, Array2 dest) {
- copy_array(source.begin(),source.end(),dest.begin());
- }
- static void copy_array (const Element& source, Element& dest) {
- dest = source;
- }
- };
- template <typename Array1, typename Array2>
- void copy_array (Array1& source, Array2& dest) {
- BOOST_ASSERT(std::equal(source.shape(),source.shape()+source.num_dimensions(),
- dest.shape()));
- // Dispatch to the proper function
- typedef typename Array1::element element_type;
- copy_dispatch<element_type>::
- copy_array(source.begin(),source.end(),dest.begin());
- }
- } // namespace multi_array
- } // namespace detail
- } // namespace boost
- #endif
|