]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Don't derive InvalidAccessor from TriaAccessorBase. 14828/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Sat, 25 Feb 2023 17:10:03 +0000 (10:10 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Sat, 25 Feb 2023 19:59:05 +0000 (12:59 -0700)
include/deal.II/grid/tria_accessor.h
include/deal.II/grid/tria_accessor.templates.h
source/grid/tria_accessor.cc
source/grid/tria_accessor.inst.in

index e9d0cd6cc8186886d873b9aaf4773793e2c1675b..d6c44e618d42e8dd0d9e9aeb97b6a999cd23fb2a 100644 (file)
@@ -567,14 +567,36 @@ private:
  * @ingroup Accessors
  */
 template <int structdim, int dim, int spacedim = dim>
-class InvalidAccessor : public TriaAccessorBase<structdim, dim, spacedim>
+class InvalidAccessor
 {
 public:
   /**
-   * Propagate alias from base class to this class.
+   * Dimension of the space the object represented by this accessor lives in.
+   * For example, if this accessor represents a quad that is part of a two-
+   * dimensional surface in four-dimensional space, then this value is four.
    */
-  using AccessorData =
-    typename TriaAccessorBase<structdim, dim, spacedim>::AccessorData;
+  static constexpr unsigned int space_dimension = spacedim;
+
+  /**
+   * Dimensionality of the object that the thing represented by this accessor
+   * is part of. For example, if this accessor represents a line that is part
+   * of a hexahedron, then this value will be three.
+   */
+  static constexpr unsigned int dimension = dim;
+
+  /**
+   * Dimensionality of the current object represented by this accessor. For
+   * example, if it is line (irrespective of whether it is part of a quad or
+   * hex, and what dimension we are in), then this value equals 1.
+   */
+  static const unsigned int structure_dimension = structdim;
+
+  /**
+   * Declare the data type that this accessor class expects to get passed from
+   * the iterator classes. Since the pure triangulation iterators need no
+   * additional data, this data type is @p void.
+   */
+  using AccessorData = void;
 
   /**
    * Constructor.  This class is used for iterators that do not make
@@ -626,6 +648,28 @@ public:
   void
   operator--() const;
 
+  /**
+   * Return the state of the iterator.  For the different states an accessor
+   * can be in, refer to the TriaRawIterator documentation.
+   */
+  static IteratorState::IteratorStates
+  state();
+
+
+  /**
+   * Level of this object. Vertices have no level, so this function always
+   * returns zero.
+   */
+  static int
+  level();
+
+  /**
+   * Index of this object. Returns the global index of the vertex this object
+   * points to.
+   */
+  static int
+  index();
+
   /**
    * Dummy function representing whether the accessor points to a used or an
    * unused object.
index 8cdf67858fb68759f84876e5a2fc76d6e8ac6ed6..18920e2035b22a4bcb557f6322be95d638f36fb8 100644 (file)
@@ -393,9 +393,7 @@ InvalidAccessor<structdim, dim, spacedim>::InvalidAccessor(
 
 template <int structdim, int dim, int spacedim>
 InvalidAccessor<structdim, dim, spacedim>::InvalidAccessor(
-  const InvalidAccessor &i)
-  : TriaAccessorBase<structdim, dim, spacedim>(
-      static_cast<const TriaAccessorBase<structdim, dim, spacedim> &>(i))
+  const InvalidAccessor &)
 {
   Assert(false,
          ExcMessage("You are attempting an invalid conversion between "
@@ -565,7 +563,7 @@ inline typename dealii::internal::TriangulationImplementation::
 {
   // nothing to do here. we could throw an exception but we can't get here
   // without first creating an object which would have already thrown
-  return dealii::internal::TriangulationImplementation::
+  return typename dealii::internal::TriangulationImplementation::
     Iterators<dim, spacedim>::quad_iterator();
 }
 
index 5ffe8de7d4fda5ca902015421abc9b8594ab6dc0..ea92e51557533024ce75b54a4f8b40d46c4bdcac 100644 (file)
@@ -3512,6 +3512,32 @@ CellAccessor<dim, spacedim>::neighbor_child_on_subface(
 
 
 
+template <int structdim, int dim, int spacedim>
+IteratorState::IteratorStates
+InvalidAccessor<structdim, dim, spacedim>::state()
+{
+  return IteratorState::invalid;
+}
+
+
+
+template <int structdim, int dim, int spacedim>
+int
+InvalidAccessor<structdim, dim, spacedim>::level()
+{
+  return -1;
+}
+
+
+
+template <int structdim, int dim, int spacedim>
+int
+InvalidAccessor<structdim, dim, spacedim>::index()
+{
+  return -1;
+}
+
+
 // explicit instantiations
 #include "tria_accessor.inst"
 
index b586d55ba2bb1caf945fd3b5b16ff8b0a4dba8d9..865020c34412bc64cd3c55db97b129f30d9642c5 100644 (file)
@@ -57,3 +57,11 @@ for (deal_II_space_dimension : DIMENSIONS)
     template class TriaAccessor<0, 1, deal_II_space_dimension>;
     template class TriaIterator<TriaAccessor<0, 1, deal_II_space_dimension>>;
   }
+
+for (deal_II_struct_dimension : DIMENSIONS; deal_II_dimension : DIMENSIONS;
+     deal_II_space_dimension : DIMENSIONS)
+  {
+    template class InvalidAccessor<deal_II_struct_dimension,
+                                   deal_II_dimension,
+                                   deal_II_space_dimension>;
+  }
\ No newline at end of file

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.