diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/stdapis/boost/multi_array/copy_array.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/stdapis/boost/multi_array/copy_array.hpp Tue Mar 16 16:12:26 2010 +0000 @@ -0,0 +1,68 @@ +// 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 + +namespace boost { +namespace detail { +namespace multi_array { + +template +class copy_dispatch { +public: + template + 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 + 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 +void copy_array (Array1& source, Array2& dest) { + 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:: + copy_array(source.begin(),source.end(),dest.begin()); +} + + +} // namespace multi_array +} // namespace detail +} // namespace boost + +#endif // COPY_ARRAY_RG092101_HPP