]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Convert Triangulation::faces from a raw pointer to a std_cxx11::unique_ptr.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Wed, 10 Aug 2016 02:30:45 +0000 (21:30 -0500)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Sun, 14 Aug 2016 19:17:14 +0000 (14:17 -0500)
include/deal.II/grid/tria.h
include/deal.II/grid/tria_accessor.templates.h
source/grid/tria.cc

index b096131b237dda18162ec94efd32b0a3d9a06dda..c414dff9c7cd8f99a68cb5638a7b4dcedc88efc2 100644 (file)
@@ -24,6 +24,7 @@
 #include <deal.II/base/geometry_info.h>
 #include <deal.II/base/iterator_range.h>
 #include <deal.II/base/std_cxx11/function.h>
+#include <deal.II/base/std_cxx11/unique_ptr.h>
 #include <deal.II/grid/tria_iterator_selector.h>
 
 // Ignore deprecation warnings for auto_ptr.
@@ -31,6 +32,11 @@ DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
 #include <boost/signals2.hpp>
 #include <boost/serialization/vector.hpp>
 #include <boost/serialization/map.hpp>
+#ifdef DEAL_II_WITH_CXX11
+#  include <boost/serialization/unique_ptr.hpp>
+#else
+#  include <boost/serialization/scoped_ptr.hpp>
+#endif
 #include <boost/serialization/split_member.hpp>
 DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
 
@@ -3342,7 +3348,7 @@ private:
    * in 2D it contains data concerning lines and in 3D quads and lines.  All
    * of these have no level and are therefore treated separately.
    */
-  dealii::internal::Triangulation::TriaFaces<dim> *faces;
+  std_cxx11::unique_ptr<dealii::internal::Triangulation::TriaFaces<dim> > faces;
 
 
   /**
index de66fa54d8151e3c9f851e21ddc18131776ba360..9eaa2603ed1b7d7099657cea9f707323b3f53b84 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 1999 - 2015 by the deal.II authors
+// Copyright (C) 1999 - 2016 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -381,7 +381,7 @@ TriaAccessorBase<structdim,dim,spacedim>::objects() const
     // get sub-objects. note that the
     // current class is only used for
     // objects that are *not* cells
-    return *dealii::internal::TriaAccessorBase::get_objects (this->tria->faces,
+    return *dealii::internal::TriaAccessorBase::get_objects (this->tria->faces.get(),
                                                              dealii::internal::int2type<structdim> ());
   else
     return *dealii::internal::TriaAccessorBase::get_objects (&this->tria->levels[this->present_level]->cells,
index 0cbaa759724c343e9d1f8c08dbc6081dac412c60..f03cff7cee28fee53e7b4bb6ab4ebb3e86f8d1f8 100644 (file)
@@ -1962,7 +1962,7 @@ namespace internal
 
         // reserve enough space
         triangulation.levels.push_back (new internal::Triangulation::TriaLevel<dim>);
-        triangulation.faces = new internal::Triangulation::TriaFaces<dim>;
+        triangulation.faces.reset (new internal::Triangulation::TriaFaces<dim>);
         triangulation.levels[0]->reserve_space (cells.size(), dim, spacedim);
         triangulation.faces->lines.reserve_space (0,needed_lines.size());
         triangulation.levels[0]->cells.reserve_space (0,cells.size());
@@ -2336,7 +2336,7 @@ namespace internal
         // for the lines
         // reserve enough space
         triangulation.levels.push_back (new internal::Triangulation::TriaLevel<dim>);
-        triangulation.faces = new internal::Triangulation::TriaFaces<dim>;
+        triangulation.faces.reset (new internal::Triangulation::TriaFaces<dim>);
         triangulation.levels[0]->reserve_space (cells.size(), dim, spacedim);
         triangulation.faces->lines.reserve_space (0,needed_lines.size());
 
@@ -8956,7 +8956,6 @@ Triangulation (const MeshSmoothing smooth_grid,
                const bool check_for_distorted_cells)
   :
   smooth_grid(smooth_grid),
-  faces(NULL),
   anisotropic_refinement(false),
   check_for_distorted_cells(check_for_distorted_cells),
   vertex_to_boundary_id_map_1d (0),
@@ -9019,8 +9018,6 @@ Triangulation (Triangulation<dim, spacedim> &&tria)
   for (unsigned int i=0; i<tria.levels.size(); ++i)
     tria.levels[i] = nullptr;
 
-  tria.faces = nullptr;
-
   tria.number_cache = internal::Triangulation::NumberCache<dim>();
 
   tria.vertex_to_boundary_id_map_1d = nullptr;
@@ -9041,12 +9038,6 @@ Triangulation<dim, spacedim>::~Triangulation ()
       }
   levels.clear ();
 
-  if (faces)
-    {
-      delete faces;
-      faces = 0;
-    }
-
   // the vertex_to_boundary_id_map_1d field
   // should be unused except in 1d
   Assert ((dim == 1)
@@ -9323,7 +9314,8 @@ copy_triangulation (const Triangulation<dim, spacedim> &old_tria)
   anisotropic_refinement = old_tria.anisotropic_refinement;
   smooth_grid            = old_tria.smooth_grid;
 
-  faces         = new internal::Triangulation::TriaFaces<dim>(*old_tria.faces);
+  if (dim > 1)
+    faces.reset (new internal::Triangulation::TriaFaces<dim>(*old_tria.faces));
 
   typename std::map<types::manifold_id,
            SmartPointer<const Manifold<dim,spacedim> , Triangulation<dim, spacedim> > >::const_iterator
@@ -9780,7 +9772,7 @@ void Triangulation<dim,spacedim>::clear_user_data ()
 {
   // let functions in anonymous namespace do their work
   dealii::clear_user_data (levels);
-  dealii::clear_user_data (faces);
+  dealii::clear_user_data (faces.get());
 }
 
 
@@ -9806,7 +9798,7 @@ namespace
 template <int dim, int spacedim>
 void Triangulation<dim,spacedim>::clear_user_flags_line ()
 {
-  dealii::clear_user_flags_line (levels, faces);
+  dealii::clear_user_flags_line (levels, faces.get());
 }
 
 
@@ -9838,7 +9830,7 @@ namespace
 template <int dim, int spacedim>
 void Triangulation<dim,spacedim>::clear_user_flags_quad ()
 {
-  dealii::clear_user_flags_quad (levels, faces);
+  dealii::clear_user_flags_quad (levels, faces.get());
 }
 
 
@@ -9870,7 +9862,7 @@ namespace
 template <int dim, int spacedim>
 void Triangulation<dim,spacedim>::clear_user_flags_hex ()
 {
-  dealii::clear_user_flags_hex (levels, faces);
+  dealii::clear_user_flags_hex (levels, faces.get());
 }
 
 
@@ -12003,8 +11995,7 @@ Triangulation<dim, spacedim>::clear_despite_subscriptions()
     delete levels[i];
   levels.clear ();
 
-  delete faces;
-  faces = NULL;
+  faces.reset ();
 
   vertices.clear ();
   vertices_used.clear ();

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.