You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
68 lines
1.9 KiB
68 lines
1.9 KiB
// 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 COPY_ARRAY_RG092101_HPP |
|
#define COPY_ARRAY_RG092101_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 // COPY_ARRAY_RG092101_HPP
|
|
|