]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Make SymmetricTensor trivially copyable. 3811/head
authorDavid Wells <wellsd2@rpi.edu>
Mon, 16 Jan 2017 04:44:42 +0000 (23:44 -0500)
committerDavid Wells <wellsd2@rpi.edu>
Mon, 16 Jan 2017 19:19:00 +0000 (14:19 -0500)
This is a follow up to 0004f1cbcd2 which made Tensors trivially copyable.

include/deal.II/base/symmetric_tensor.h
tests/base/symmetric_tensor_trivial_copy.cc [new file with mode: 0644]
tests/base/symmetric_tensor_trivial_copy.output [new file with mode: 0644]

index 86fd420cfdd3a948c1a00d3745da2f6024403839..2a5b4c16fae5343741ad2032003876b52b558bfc 100644 (file)
@@ -569,11 +569,6 @@ public:
   explicit
   SymmetricTensor (const SymmetricTensor<rank,dim,OtherNumber> &initializer);
 
-  /**
-   * Assignment operator.
-   */
-  SymmetricTensor &operator = (const SymmetricTensor &);
-
   /**
    * This operator assigns a scalar to a tensor. To avoid confusion with what
    * exactly it means to assign a scalar value to a tensor, zero is the only
@@ -1005,17 +1000,6 @@ SymmetricTensor<rank,dim,Number>::SymmetricTensor (const Number (&array) [n_inde
 
 
 
-template <int rank, int dim, typename Number>
-inline
-SymmetricTensor<rank,dim,Number> &
-SymmetricTensor<rank,dim,Number>::operator = (const SymmetricTensor<rank,dim,Number> &t)
-{
-  data = t.data;
-  return *this;
-}
-
-
-
 template <int rank, int dim, typename Number>
 inline
 SymmetricTensor<rank,dim,Number> &
diff --git a/tests/base/symmetric_tensor_trivial_copy.cc b/tests/base/symmetric_tensor_trivial_copy.cc
new file mode 100644 (file)
index 0000000..1f00272
--- /dev/null
@@ -0,0 +1,76 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+
+// Verify that SymmetricTensor is trivially copyable.
+
+// TODO not all compilers that support enough of a subset of C++11 to compile
+// the library (notably GCC 4.8) implement std::is_trivally_copyable. At some
+// point in the future we should use that instead of the boost equivalent.
+
+#include <deal.II/base/symmetric_tensor.h>
+
+#include <boost/type_traits.hpp>
+
+#include <complex>
+
+#include "../tests.h"
+
+template <typename Number>
+void test()
+{
+  deallog << "SymmetricTensor<2, 1> is trivially copyable: "
+          << boost::has_trivial_copy<SymmetricTensor<2, 1, Number> >::value
+          << std::endl;
+  deallog << "SymmetricTensor<2, 2> is trivially copyable: "
+          << boost::has_trivial_copy<SymmetricTensor<2, 2, Number> >::value
+          << std::endl;
+  deallog << "SymmetricTensor<2, 3> is trivially copyable: "
+          << boost::has_trivial_copy<SymmetricTensor<2, 3, Number> >::value
+          << std::endl;
+
+  deallog << "SymmetricTensor<4, 1> is trivially copyable: "
+          << boost::has_trivial_copy<SymmetricTensor<4, 1, Number> >::value
+          << std::endl;
+  deallog << "SymmetricTensor<4, 2> is trivially copyable: "
+          << boost::has_trivial_copy<SymmetricTensor<4, 2, Number> >::value
+          << std::endl;
+  deallog << "SymmetricTensor<4, 3> is trivially copyable: "
+          << boost::has_trivial_copy<SymmetricTensor<4, 3, Number> >::value
+          << std::endl;
+}
+
+int main()
+{
+  std::ofstream logfile("output");
+  deallog.attach(logfile);
+
+  deallog << std::boolalpha;
+  deallog << "testing float"
+          << std::endl;
+  test<float>();
+
+  deallog << "testing double"
+          << std::endl;
+  test<double>();
+
+  deallog << "testing std::complex<float>"
+          << std::endl;
+  test<std::complex<float> >();
+
+  deallog << "testing std::complex<double>"
+          << std::endl;
+  test<std::complex<double> >();
+}
diff --git a/tests/base/symmetric_tensor_trivial_copy.output b/tests/base/symmetric_tensor_trivial_copy.output
new file mode 100644 (file)
index 0000000..35a9731
--- /dev/null
@@ -0,0 +1,29 @@
+
+DEAL::testing float
+DEAL::SymmetricTensor<2, 1> is trivially copyable: true
+DEAL::SymmetricTensor<2, 2> is trivially copyable: true
+DEAL::SymmetricTensor<2, 3> is trivially copyable: true
+DEAL::SymmetricTensor<4, 1> is trivially copyable: true
+DEAL::SymmetricTensor<4, 2> is trivially copyable: true
+DEAL::SymmetricTensor<4, 3> is trivially copyable: true
+DEAL::testing double
+DEAL::SymmetricTensor<2, 1> is trivially copyable: true
+DEAL::SymmetricTensor<2, 2> is trivially copyable: true
+DEAL::SymmetricTensor<2, 3> is trivially copyable: true
+DEAL::SymmetricTensor<4, 1> is trivially copyable: true
+DEAL::SymmetricTensor<4, 2> is trivially copyable: true
+DEAL::SymmetricTensor<4, 3> is trivially copyable: true
+DEAL::testing std::complex<float>
+DEAL::SymmetricTensor<2, 1> is trivially copyable: true
+DEAL::SymmetricTensor<2, 2> is trivially copyable: true
+DEAL::SymmetricTensor<2, 3> is trivially copyable: true
+DEAL::SymmetricTensor<4, 1> is trivially copyable: true
+DEAL::SymmetricTensor<4, 2> is trivially copyable: true
+DEAL::SymmetricTensor<4, 3> is trivially copyable: true
+DEAL::testing std::complex<double>
+DEAL::SymmetricTensor<2, 1> is trivially copyable: true
+DEAL::SymmetricTensor<2, 2> is trivially copyable: true
+DEAL::SymmetricTensor<2, 3> is trivially copyable: true
+DEAL::SymmetricTensor<4, 1> is trivially copyable: true
+DEAL::SymmetricTensor<4, 2> is trivially copyable: true
+DEAL::SymmetricTensor<4, 3> is trivially copyable: true

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.