From 2bae7436975b3945dfc4b07cf13cc0ba0ac29ccb Mon Sep 17 00:00:00 2001 From: danshapero Date: Mon, 29 Aug 2016 11:42:23 -0700 Subject: [PATCH] Wrote move assignment operator for Triangulation, Subscriptor throws exception in test --- include/deal.II/grid/tria.h | 5 ++++ source/grid/tria.cc | 29 +++++++++++++++++++ tests/grid/move_constructor.cc | 12 ++++++++ .../move_constructor.with_cxx11=on.output | 12 ++++++++ 4 files changed, 58 insertions(+) diff --git a/include/deal.II/grid/tria.h b/include/deal.II/grid/tria.h index 224d70830e..421ff17e86 100644 --- a/include/deal.II/grid/tria.h +++ b/include/deal.II/grid/tria.h @@ -1530,6 +1530,11 @@ public: * triangulation. */ Triangulation (Triangulation &&tria); + + /** + * Move assignment operator. + */ + Triangulation &operator = (Triangulation &&tria); #endif /** diff --git a/source/grid/tria.cc b/source/grid/tria.cc index 9dd232f834..a98dfad2ab 100644 --- a/source/grid/tria.cc +++ b/source/grid/tria.cc @@ -9015,6 +9015,35 @@ Triangulation (Triangulation &&tria) tria.number_cache = internal::Triangulation::NumberCache(); } + + +template +Triangulation& +Triangulation::operator= (Triangulation &&tria) +{ + Subscriptor::operator=(std::move(tria)); + + smooth_grid = tria.smooth_grid; + periodic_face_pairs_level_0 = std::move(tria.periodic_face_pairs_level_0); + periodic_face_map = std::move(tria.periodic_face_map); + levels = std::move(tria.levels); + faces = std::move(tria.faces); + vertices = std::move(tria.vertices); + vertices_used = std::move(tria.vertices_used); + manifold = std::move(tria.manifold); + anisotropic_refinement = tria.anisotropic_refinement; + //check_for_distorted_cells = tria.check_for_distorted_cells; + number_cache = tria.number_cache; + vertex_to_boundary_id_map_1d = std::move(tria.vertex_to_boundary_id_map_1d); + vertex_to_manifold_id_map_1d = std::move(tria.vertex_to_manifold_id_map_1d); + + for (unsigned int i=0; i(); + + return *this; +} #endif diff --git a/tests/grid/move_constructor.cc b/tests/grid/move_constructor.cc index b272e74a62..724bd9c818 100644 --- a/tests/grid/move_constructor.cc +++ b/tests/grid/move_constructor.cc @@ -55,6 +55,10 @@ void test_hyper_cube() Triangulation new_tria = std::move(tria); print_tria_info(new_tria); print_tria_info(tria); + + tria = std::move(new_tria); + print_tria_info(new_tria); + print_tria_info(tria); } @@ -76,6 +80,10 @@ void test_hyper_shell() Triangulation new_tria = std::move(tria); print_tria_info(new_tria); print_tria_info(tria); + + tria = std::move(new_tria); + print_tria_info(new_tria); + print_tria_info(tria); } @@ -98,6 +106,10 @@ void test_periodic_cube() Triangulation new_tria = std::move(tria); print_tria_info(new_tria); print_tria_info(tria); + + tria = std::move(new_tria); + print_tria_info(new_tria); + print_tria_info(tria); } diff --git a/tests/grid/move_constructor.with_cxx11=on.output b/tests/grid/move_constructor.with_cxx11=on.output index 76860e1bb0..0b68a9dcef 100644 --- a/tests/grid/move_constructor.with_cxx11=on.output +++ b/tests/grid/move_constructor.with_cxx11=on.output @@ -4,27 +4,39 @@ DEAL::Dimension: 2 DEAL::1, 0, 1, 1, 1, 1, 0, 1 DEAL::1, 0, 1, 1, 1, 1, 0, 1 DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::1, 0, 1, 1, 1, 1, 0, 1 DEAL::Dimension: 3 DEAL::1, 1, 1, 1, 1, 1, 0, 1 DEAL::1, 1, 1, 1, 1, 1, 0, 1 DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::1, 1, 1, 1, 1, 1, 0, 1 DEAL:: DEAL::Hyper-shell: DEAL::Dimension: 2 DEAL::1, 0, 1, 1, 1, 1, 0, 0 DEAL::1, 0, 1, 1, 1, 1, 0, 0 DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::1, 0, 1, 1, 1, 1, 0, 0 DEAL::Dimension: 3 DEAL::1, 1, 1, 1, 1, 1, 0, 0 DEAL::1, 1, 1, 1, 1, 1, 0, 0 DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::1, 1, 1, 1, 1, 1, 0, 0 DEAL:: DEAL::Periodic hyper-cube: DEAL::Dimension: 2 DEAL::1, 0, 1, 1, 1, 1, 1, 1 DEAL::1, 0, 1, 1, 1, 1, 1, 1 DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::1, 0, 1, 1, 1, 1, 1, 1 DEAL::Dimension: 3 DEAL::1, 1, 1, 1, 1, 1, 1, 1 DEAL::1, 1, 1, 1, 1, 1, 1, 1 DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::0, 0, 0, 0, 0, 0, 0, 1 +DEAL::1, 1, 1, 1, 1, 1, 1, 1 -- 2.39.5