Skip to content

Commit

Permalink
Merge pull request #3811 from drwells/symmetric-tensor-default-methods
Browse files Browse the repository at this point in the history
Make SymmetricTensor trivially copyable.
  • Loading branch information
kronbichler committed Jan 16, 2017
2 parents 9df2c77 + 80be3b7 commit 4b5d3e9
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 16 deletions.
16 changes: 0 additions & 16 deletions include/deal.II/base/symmetric_tensor.h
Expand Up @@ -569,11 +569,6 @@ class SymmetricTensor
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
Expand Down Expand Up @@ -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> &
Expand Down
76 changes: 76 additions & 0 deletions tests/base/symmetric_tensor_trivial_copy.cc
@@ -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> >();
}
29 changes: 29 additions & 0 deletions tests/base/symmetric_tensor_trivial_copy.output
@@ -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

0 comments on commit 4b5d3e9

Please sign in to comment.