diff DEPENDENCIES/generic/include/boost/multi_array/copy_array.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/multi_array/copy_array.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -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 "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