]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix compilation on clang. 2600/head
authorDavid Wells <wellsd2@rpi.edu>
Fri, 13 May 2016 18:26:17 +0000 (14:26 -0400)
committerDavid Wells <wellsd2@rpi.edu>
Fri, 13 May 2016 22:17:11 +0000 (18:17 -0400)
The previous commit 18ddfc4cf1 compiled under GCC but not clang. Credit
goes to Wolfgang Bangerth for the suggested usage of a variadic function
to raise errors when dim != spacedim.

include/deal.II/grid/grid_tools.h
source/grid/grid_tools.cc
source/grid/tria.cc

index 6aca950feae062f59d12ba801117a2ac93364325..051ff11e15e9b7c4c9bbff4c30b4d8f745daed9e 100644 (file)
@@ -157,30 +157,18 @@ namespace GridTools
    * get the same result using <code>cell-@>measure()</code>, but this
    * function also works for cells that do not exist except that you make it
    * up by naming its vertices from the list.
-   *
-   * @note Since <code>dim</code> does not explicitly appear in the function
-   * signature, you must explicitly specify both dimensions when using this
-   * function.
    */
-  template <int dim, int spacedim>
-  double cell_measure (const std::vector<Point<spacedim> > &all_vertices,
+  template <int dim>
+  double cell_measure (const std::vector<Point<dim> > &all_vertices,
                        const unsigned int (&vertex_indices)[GeometryInfo<dim>::vertices_per_cell]);
 
-
   /**
-   * Same as the last function, but for the codimension zero case. This extra
-   * function allows one to write
-   *
-   * @code
-   * cell_measure(vertices, indices);
-   * @endcode
-   *
-   * and have the template function argument (i.e. <code>dim</code>) inferred
-   * automatically.
+   * A version of the last function that can accept input for nonzero
+   * codimension cases. This function only exists to aid generic programming
+   * and calling it will just raise an exception.
    */
-  template <int dim>
-  double cell_measure (const std::vector<Point<dim> > &all_vertices,
-                       const unsigned int (&vertex_indices)[GeometryInfo<dim>::vertices_per_cell]);
+  template <int dim, typename T>
+  double cell_measure (const T &, ...);
 
   /*@}*/
   /**
@@ -1655,17 +1643,13 @@ namespace GridTools
 
 namespace GridTools
 {
-  // This function just wraps the general case: see the note in its
-  // documentation above.
-  template <int dim>
-  double cell_measure (const std::vector<Point<dim> > &all_vertices,
-                       const unsigned int (&vertex_indices)[GeometryInfo<dim>::vertices_per_cell])
+  template <int dim, typename T>
+  double cell_measure (const T &, ...)
   {
-    return cell_measure<dim, dim>(all_vertices, vertex_indices);
+    Assert(false, ExcNotImplemented());
+    return std::numeric_limits<double>::quiet_NaN();
   }
 
-
-
   template <int dim, typename Predicate, int spacedim>
   void transform (const Predicate    &predicate,
                   Triangulation<dim, spacedim> &triangulation)
index 91dc5d834e32965af1c835ed31559d8e04f7659b..4141fb98f0e05ed80228af57698a7b947e02207c 100644 (file)
@@ -170,7 +170,7 @@ namespace GridTools
 
   template <>
   double
-  cell_measure<1, 1>
+  cell_measure<1>
   (const std::vector<Point<1> > &all_vertices,
    const unsigned int (&vertex_indices)[GeometryInfo<1>::vertices_per_cell])
   {
@@ -182,43 +182,7 @@ namespace GridTools
 
   template <>
   double
-  cell_measure<1, 2>
-  (const std::vector<Point<2> > &,
-   const unsigned int (&)[GeometryInfo<1>::vertices_per_cell])
-  {
-    Assert(false, ExcNotImplemented());
-    return std::numeric_limits<double>::quiet_NaN();
-  }
-
-
-
-  template <>
-  double
-  cell_measure<1, 3>
-  (const std::vector<Point<3> > &,
-   const unsigned int (&)[GeometryInfo<1>::vertices_per_cell])
-  {
-    Assert(false, ExcNotImplemented());
-    return std::numeric_limits<double>::quiet_NaN();
-  }
-
-
-
-  template <>
-  double
-  cell_measure<2, 3>
-  (const std::vector<Point<3> > &,
-   const unsigned int (&)[GeometryInfo<2>::vertices_per_cell])
-  {
-    Assert(false, ExcNotImplemented());
-    return std::numeric_limits<double>::quiet_NaN();
-  }
-
-
-
-  template <>
-  double
-  cell_measure<3, 3>
+  cell_measure<3>
   (const std::vector<Point<3> > &all_vertices,
    const unsigned int (&vertex_indices)[GeometryInfo<3>::vertices_per_cell])
   {
@@ -342,7 +306,7 @@ namespace GridTools
 
   template <>
   double
-  cell_measure<2, 2>
+  cell_measure<2>
   (const std::vector<Point<2> > &all_vertices,
    const unsigned int (&vertex_indices) [GeometryInfo<2>::vertices_per_cell])
   {
index 4d8351d568368dcaa86995bdbee1fdb18dd318ea..a8de8204110102dbf332d3a3b23912ae1522fc4e 100644 (file)
@@ -1652,7 +1652,7 @@ namespace internal
                 // throw an exception if no such cells should exist.
                 if (!triangulation.check_for_distorted_cells)
                   {
-                    const double cell_measure = GridTools::cell_measure<1, spacedim>
+                    const double cell_measure = GridTools::cell_measure<1>
                                                 (triangulation.vertices, cells[cell_no].vertices);
                     AssertThrow(cell_measure > 0, ExcGridHasInvalidCell(cell_no));
                   }
@@ -1851,7 +1851,7 @@ namespace internal
                 // See the note in the 1D function on this if statement.
                 if (!triangulation.check_for_distorted_cells)
                   {
-                    const double cell_measure = GridTools::cell_measure<2, spacedim>
+                    const double cell_measure = GridTools::cell_measure<2>
                                                 (triangulation.vertices, cells[cell_no].vertices);
                     AssertThrow(cell_measure > 0, ExcGridHasInvalidCell(cell_no));
                   }
@@ -2234,7 +2234,7 @@ namespace internal
             // See the note in the 1D function on this if statement.
             if (!triangulation.check_for_distorted_cells)
               {
-                const double cell_measure = GridTools::cell_measure<3, spacedim>
+                const double cell_measure = GridTools::cell_measure<3>
                                             (triangulation.vertices, cells[cell_no].vertices);
                 AssertThrow(cell_measure > 0, ExcGridHasInvalidCell(cell_no));
               }

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.