]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Rename Subscriptor -> EnableRefCountingByObserverPointer.
authorWolfgang Bangerth <bangerth@colostate.edu>
Wed, 11 Sep 2024 22:39:44 +0000 (16:39 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Wed, 18 Sep 2024 23:44:54 +0000 (17:44 -0600)
200 files changed:
doc/doxygen/headers/coding_conventions.h
doc/doxygen/headers/memory.h
examples/step-14/step-14.cc
examples/step-21/step-21.cc
examples/step-22/doc/results.dox
examples/step-22/step-22.cc
examples/step-29/step-29.cc
examples/step-31/step-31.cc
examples/step-32/step-32.cc
examples/step-37/step-37.cc
examples/step-39/step-39.cc
examples/step-43/step-43.cc
examples/step-45/step-45.cc
examples/step-55/step-55.cc
examples/step-56/step-56.cc
examples/step-57/step-57.cc
examples/step-59/step-59.cc
examples/step-64/step-64.cc
examples/step-66/step-66.cc
examples/step-7/step-7.cc
examples/step-75/step-75.cc
examples/step-83/doc/intro.dox
include/deal.II/algorithms/any_data.h
include/deal.II/algorithms/general_data_storage.h
include/deal.II/algorithms/operator.h
include/deal.II/algorithms/timestep_control.h
include/deal.II/base/function.h
include/deal.II/base/logstream.h
include/deal.II/base/mg_level_object.h
include/deal.II/base/observer_pointer.h
include/deal.II/base/parameter_acceptor.h
include/deal.II/base/parameter_handler.h
include/deal.II/base/polynomial.h
include/deal.II/base/polynomials_piecewise.h
include/deal.II/base/quadrature.h
include/deal.II/base/quadrature_point_data.h
include/deal.II/base/subscriptor.h
include/deal.II/base/table.h
include/deal.II/base/tensor_function.h
include/deal.II/distributed/repartitioning_policy_tools.h
include/deal.II/distributed/shared_tria.h
include/deal.II/distributed/tria.h
include/deal.II/dofs/block_info.h
include/deal.II/dofs/dof_handler.h
include/deal.II/fe/fe.h
include/deal.II/fe/fe_series.h
include/deal.II/fe/fe_tools.h
include/deal.II/fe/fe_tools.templates.h
include/deal.II/fe/fe_values_base.h
include/deal.II/fe/mapping.h
include/deal.II/grid/grid_tools_cache.h
include/deal.II/grid/intergrid_map.h
include/deal.II/grid/manifold.h
include/deal.II/grid/tria.h
include/deal.II/hp/collection.h
include/deal.II/hp/fe_values.h
include/deal.II/lac/affine_constraints.h
include/deal.II/lac/arpack_solver.h
include/deal.II/lac/block_indices.h
include/deal.II/lac/block_matrix_base.h
include/deal.II/lac/block_sparse_matrix_ez.h
include/deal.II/lac/block_sparse_matrix_ez.templates.h
include/deal.II/lac/block_vector_base.h
include/deal.II/lac/chunk_sparse_matrix.h
include/deal.II/lac/chunk_sparse_matrix.templates.h
include/deal.II/lac/chunk_sparsity_pattern.h
include/deal.II/lac/diagonal_matrix.h
include/deal.II/lac/la_parallel_vector.h
include/deal.II/lac/la_parallel_vector.templates.h
include/deal.II/lac/lapack_full_matrix.h
include/deal.II/lac/matrix_block.h
include/deal.II/lac/parpack_solver.h
include/deal.II/lac/petsc_matrix_base.h
include/deal.II/lac/petsc_precondition.h
include/deal.II/lac/petsc_snes.h
include/deal.II/lac/petsc_ts.h
include/deal.II/lac/petsc_vector_base.h
include/deal.II/lac/precondition.h
include/deal.II/lac/precondition_block.h
include/deal.II/lac/precondition_selector.h
include/deal.II/lac/read_write_vector.h
include/deal.II/lac/relaxation_block.h
include/deal.II/lac/solver.h
include/deal.II/lac/solver_control.h
include/deal.II/lac/solver_selector.h
include/deal.II/lac/sparse_decomposition.h
include/deal.II/lac/sparse_direct.h
include/deal.II/lac/sparse_matrix.h
include/deal.II/lac/sparse_matrix.templates.h
include/deal.II/lac/sparse_matrix_ez.h
include/deal.II/lac/sparse_matrix_ez.templates.h
include/deal.II/lac/sparsity_pattern.h
include/deal.II/lac/sparsity_pattern_base.h
include/deal.II/lac/trilinos_epetra_vector.h
include/deal.II/lac/trilinos_precondition.h
include/deal.II/lac/trilinos_solver.h
include/deal.II/lac/trilinos_sparse_matrix.h
include/deal.II/lac/trilinos_tpetra_precondition.h
include/deal.II/lac/trilinos_tpetra_sparse_matrix.h
include/deal.II/lac/trilinos_tpetra_vector.h
include/deal.II/lac/trilinos_tpetra_vector.templates.h
include/deal.II/lac/trilinos_vector.h
include/deal.II/lac/vector.h
include/deal.II/lac/vector.templates.h
include/deal.II/lac/vector_memory.h
include/deal.II/matrix_free/fe_remote_evaluation.h
include/deal.II/matrix_free/matrix_free.h
include/deal.II/matrix_free/matrix_free.templates.h
include/deal.II/matrix_free/operators.h
include/deal.II/matrix_free/portable_matrix_free.h
include/deal.II/meshworker/local_integrator.h
include/deal.II/meshworker/vector_selector.h
include/deal.II/multigrid/mg_base.h
include/deal.II/multigrid/mg_constrained_dofs.h
include/deal.II/multigrid/mg_transfer_global_coarsening.h
include/deal.II/multigrid/multigrid.h
include/deal.II/multigrid/sparse_matrix_collection.h
include/deal.II/non_matching/mapping_info.h
include/deal.II/non_matching/mesh_classifier.h
include/deal.II/numerics/data_postprocessor.h
include/deal.II/numerics/time_dependent.h
include/deal.II/particles/particle_handler.h
source/base/quadrature.cc
source/base/subscriptor.cc
source/grid/tria.cc
source/hp/fe_values.cc
source/lac/chunk_sparsity_pattern.cc
source/lac/petsc_vector_base.cc
source/lac/trilinos_epetra_vector.cc
source/lac/trilinos_vector.cc
tests/algorithms/newton_01.cc
tests/base/assign_subscriptor.cc
tests/base/reference.cc
tests/base/smart_pointer_01.cc
tests/base/smart_pointer_02.cc
tests/base/unsubscribe_subscriptor.cc
tests/base/unsubscribe_subscriptor.debug.output
tests/base/unsubscribe_subscriptor.debug.output.clang-6
tests/base/unsubscribe_subscriptor.debug.output.gcc-12
tests/base/unsubscribe_subscriptor.debug.output.intel
tests/base/unsubscribe_subscriptor_01.cc
tests/bits/joa_1.cc
tests/bits/sparse_lu_decomposition_1.cc
tests/bits/step-14.cc
tests/fe/fe_q_dg0.cc
tests/hp/crash_21.cc
tests/integrators/cells_and_faces_01.cc
tests/integrators/functional_01.cc
tests/integrators/mesh_worker_01.cc
tests/integrators/mesh_worker_02.cc
tests/integrators/mesh_worker_03.cc
tests/integrators/mesh_worker_matrix_01.cc
tests/lac/precondition_chebyshev_07.cc
tests/lac/precondition_relaxation_01.cc
tests/matrix_free/compare_faces_by_cells.cc
tests/matrix_free/multigrid_dg_periodic.cc
tests/matrix_free/multigrid_dg_sip_01.cc
tests/matrix_free/multigrid_dg_sip_02.cc
tests/matrix_free/parallel_multigrid.cc
tests/matrix_free/parallel_multigrid_adaptive_01.cc
tests/matrix_free/parallel_multigrid_adaptive_03.cc
tests/matrix_free/parallel_multigrid_adaptive_05.cc
tests/matrix_free/parallel_multigrid_adaptive_06.cc
tests/matrix_free/parallel_multigrid_adaptive_07.cc
tests/matrix_free/parallel_multigrid_fullydistributed.cc
tests/matrix_free/parallel_multigrid_interleave.cc
tests/matrix_free/parallel_multigrid_interleave_renumber.cc
tests/matrix_free/parallel_multigrid_mf.cc
tests/matrix_free/solver_cg_interleave.cc
tests/matrix_free/step-37.cc
tests/matrix_free/stokes_computation.cc
tests/matrix_free_kokkos/coefficient_eval_device.cc
tests/matrix_free_kokkos/matrix_vector_device_mf.h
tests/mpi/mesh_worker_matrix_01.cc
tests/multigrid-global-coarsening/multigrid_dg_periodic.cc
tests/multigrid-global-coarsening/multigrid_dg_sip_01.cc
tests/multigrid-global-coarsening/multigrid_dg_sip_02.cc
tests/multigrid-global-coarsening/multigrid_util.h
tests/multigrid-global-coarsening/parallel_multigrid.cc
tests/multigrid-global-coarsening/parallel_multigrid_adaptive_01.cc
tests/multigrid-global-coarsening/parallel_multigrid_adaptive_03.cc
tests/multigrid-global-coarsening/parallel_multigrid_adaptive_05.cc
tests/multigrid-global-coarsening/parallel_multigrid_adaptive_06.cc
tests/multigrid-global-coarsening/parallel_multigrid_adaptive_07.cc
tests/multigrid-global-coarsening/parallel_multigrid_fullydistributed.cc
tests/multigrid-global-coarsening/parallel_multigrid_interleave.cc
tests/multigrid-global-coarsening/parallel_multigrid_interleave_renumber.cc
tests/multigrid-global-coarsening/parallel_multigrid_mf.cc
tests/multigrid-global-coarsening/stokes_computation.cc
tests/multigrid/mg_renumbered_02.cc
tests/multigrid/mg_renumbered_03.cc
tests/numerics/no_flux_18.cc
tests/performance/instrumentation_step_22.cc
tests/performance/timing_mg_glob_coarsen.cc
tests/performance/timing_step_22.cc
tests/petsc/petsc_snes_02.cc
tests/petsc/petsc_ts_01.cc
tests/simplex/step-31.cc
tests/simplex/step-55.cc
tests/simplex/stokes-sv.cc

index 92df3f8a94f7283b8d20c37d575123aab91ff141..d227f0211768ebcf9e706507ca6569bf65cd54a7 100644 (file)
@@ -211,7 +211,7 @@ functions with their own user-defined types by including the
 <code>.templates.h</code> files.
 
 <li> Finally, if we can not assume in advance which values template arguments
-will take (e.g., any class derived from Subscriptor can be used as an argument),
+will take (e.g., any class derived from EnableRefCountingByObserverPointer can be used as an argument),
 the definitions of functions are provided at the bottom of the header
 file with declarations. The definitions should be guarded with <code>\#ifndef
 DOXYGEN ... \#endif</code> to prevent Doxygen from picking them up.</li>
index af44b75f58157ab8af3b874f15fae5c07f6b2eb4..fd833ff8c6ca43497219497b2eaec7b8078b240a 100644 (file)
@@ -17,7 +17,7 @@
  * @defgroup memory Memory handling
  *
  * This group has some basic classes and namespaces for memory
- * handling. The Subscriptor and ObserverPointer classes are used for
+ * handling. The EnableRefCountingByObserverPointer and ObserverPointer classes are used for
  * counted memory handling, i.e. whenever a ObserverPointer is set to
  * point to an object, it increases a counter in that object; when the
  * pointer is set to point elsewhere, it decreases it again. This way,
index bf57bc6b015c7e5f4213147704c480d10bd59a06..9afa6e3c1c3e3fbdd92cb5dbce0c5923e75a8e07 100644 (file)
@@ -1052,9 +1052,10 @@ namespace Step14
 
     // Based on the above description, the <code>SetUpBase</code> class then
     // looks as follows. To allow using the <code>ObserverPointer</code> class
-    // with this class, we derived from the <code>Subscriptor</code> class.
+    // with this class, we derived from the
+    // <code>EnableRefCountingByObserverPointer</code> class.
     template <int dim>
-    struct SetUpBase : public Subscriptor
+    struct SetUpBase : public EnableRefCountingByObserverPointer
     {
       virtual const Function<dim> &get_boundary_values() const = 0;
 
@@ -1383,7 +1384,7 @@ namespace Step14
     // the right hand side, we only need to provide for a function that
     // assembles the right hand side for a given discretization:
     template <int dim>
-    class DualFunctionalBase : public Subscriptor
+    class DualFunctionalBase : public EnableRefCountingByObserverPointer
     {
     public:
       virtual void assemble_rhs(const DoFHandler<dim> &dof_handler,
index 589fd2f20e410f42def8cb8155a33cfab126659d..97719ad2e07b6a86a3bb515aa03965b8388bf633 100644 (file)
@@ -409,7 +409,7 @@ namespace Step21
   // maximum number of iterations equal to the maximum of the size of the linear
   // system and 200.
   template <class MatrixType>
-  class InverseMatrix : public Subscriptor
+  class InverseMatrix : public EnableRefCountingByObserverPointer
   {
   public:
     InverseMatrix(const MatrixType &m)
@@ -433,7 +433,7 @@ namespace Step21
 
 
 
-  class SchurComplement : public Subscriptor
+  class SchurComplement : public EnableRefCountingByObserverPointer
   {
   public:
     SchurComplement(const BlockSparseMatrix<double>           &A,
@@ -460,7 +460,7 @@ namespace Step21
 
 
 
-  class ApproximateSchurComplement : public Subscriptor
+  class ApproximateSchurComplement : public EnableRefCountingByObserverPointer
   {
   public:
     ApproximateSchurComplement(const BlockSparseMatrix<double> &A)
index 0aba8a21ad4750864dbfa0ea73bee5c0e386bb5e..0323ad696c35c4f3448ff6e541b8eeda7b35d703 100644 (file)
@@ -407,7 +407,7 @@ according to the derivation above can be specified by three successive
 operations:
 @code
 template <class PreconditionerA, class PreconditionerMp>
-class BlockSchurPreconditioner : public Subscriptor
+class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
 {
   public:
     BlockSchurPreconditioner (const BlockSparseMatrix<double>         &S,
index 22634bd4cbbad214fdeeabecf3bb91f14c9e92ce..4c78dbc8871689bae6feb49707e1994c0a3557b7 100644 (file)
@@ -279,7 +279,7 @@ namespace Step22
   // <code>InverseMatrix</code> object is created. The member function
   // <code>vmult</code> is obtained by solving a linear system:
   template <class MatrixType, class PreconditionerType>
-  class InverseMatrix : public Subscriptor
+  class InverseMatrix : public EnableRefCountingByObserverPointer
   {
   public:
     InverseMatrix(const MatrixType         &m,
@@ -337,7 +337,7 @@ namespace Step22
   // a preconditioner class as above, which affects the
   // <code>ObserverPointer</code> object <code>m_inverse</code> as well.
   template <class PreconditionerType>
-  class SchurComplement : public Subscriptor
+  class SchurComplement : public EnableRefCountingByObserverPointer
   {
   public:
     SchurComplement(
index 527197bf6ca6cf0f0995272aa4baee937eed61f4..89ed4ec5906eaf3a7de170f6fa60877cae3c03ec 100644 (file)
@@ -123,7 +123,7 @@ namespace Step29
   // <code>declare_parameters</code> that declares all the necessary
   // parameters and a <code>read_parameters</code> function that is called
   // from outside to initiate the parameter reading process.
-  class ParameterReader : public Subscriptor
+  class ParameterReader : public EnableRefCountingByObserverPointer
   {
   public:
     ParameterReader(ParameterHandler &);
index 4181ce8650396a0e3aeb244aa5e21f980fe4afe1..76411eaf6238a7a7e63c9ef9a8eb3d939bf687f8 100644 (file)
@@ -242,7 +242,7 @@ namespace Step31
     // we can abort the program preserving information about where the
     // problem happened.
     template <class MatrixType, class PreconditionerType>
-    class InverseMatrix : public Subscriptor
+    class InverseMatrix : public EnableRefCountingByObserverPointer
     {
     public:
       InverseMatrix(const MatrixType         &m,
@@ -342,7 +342,7 @@ namespace Step31
     // preconditioners in the constructor and that the matrices we use here
     // are built upon Trilinos:
     template <class PreconditionerTypeA, class PreconditionerTypeMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       BlockSchurPreconditioner(
index 0b78838c35419dc5cdd41bcbb3993441aea17d94..81c889772785eb6ca4586b4f1c38fc21943a22ea 100644 (file)
@@ -224,7 +224,7 @@ namespace Step32
   namespace LinearSolvers
   {
     template <class PreconditionerTypeA, class PreconditionerTypeMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       BlockSchurPreconditioner(const TrilinosWrappers::BlockSparseMatrix &S,
index be812ae91ff3a2ab419cec99d47b53bf14277fc4..b109dc22553a4f616cba8a07539f7ab62a47382d 100644 (file)
@@ -245,9 +245,9 @@ namespace Step37
 
   // This is the constructor of the @p LaplaceOperator class. All it does is
   // to call the default constructor of the base class
-  // MatrixFreeOperators::Base, which in turn is based on the Subscriptor
-  // class that asserts that this class is not accessed after going out of scope
-  // e.g. in a preconditioner.
+  // MatrixFreeOperators::Base, which in turn is based on the
+  // EnableRefCountingByObserverPointer class that asserts that this class is
+  // not accessed after going out of scope e.g. in a preconditioner.
   template <int dim, int fe_degree, typename number>
   LaplaceOperator<dim, fe_degree, number>::LaplaceOperator()
     : MatrixFreeOperators::Base<dim,
index 47e4d05e56652e8eb3b47659d66cfacec0fca9ed..a1d5e29b0f9ccb4c606b446e5b2d46271ec7ba71 100644 (file)
@@ -620,7 +620,8 @@ namespace Step39
     mg_matrix_dg_down.clear_elements();
     // It is important to update the sparsity patterns after <tt>clear()</tt>
     // was called for the level matrices, since the matrices lock the sparsity
-    // pattern through the ObserverPointer and Subscriptor mechanism.
+    // pattern through the ObserverPointer and
+    // EnableRefCountingByObserverPointer mechanism.
     mg_sparsity.resize(0, n_levels - 1);
     mg_sparsity_dg_interface.resize(0, n_levels - 1);
 
index 036e32f792da25de54ee1316843cad768e53f5ef..76f807ff6ffa42062cf4ab65f8cefef9dc6bf74a 100644 (file)
@@ -318,7 +318,7 @@ namespace Step43
   namespace LinearSolvers
   {
     template <class MatrixType, class PreconditionerType>
-    class InverseMatrix : public Subscriptor
+    class InverseMatrix : public EnableRefCountingByObserverPointer
     {
     public:
       InverseMatrix(const MatrixType         &m,
@@ -366,7 +366,7 @@ namespace Step43
     }
 
     template <class PreconditionerTypeA, class PreconditionerTypeMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       BlockSchurPreconditioner(
index 9cd59e495ad81a1e95a37226e2bca1e433e42ab6..5d1f56db0ec2cc1a24ed58d9b4c4a0b6adc5f1b8 100644 (file)
@@ -185,7 +185,7 @@ namespace Step45
 
 
   template <class MatrixType, class PreconditionerType>
-  class InverseMatrix : public Subscriptor
+  class InverseMatrix : public EnableRefCountingByObserverPointer
   {
   public:
     InverseMatrix(const MatrixType         &m,
index ec65240c803cea182933a76754fa6681b451910f..8577068aa8f7f9d4c89e06fd44ff7d4bf421b4fc 100644 (file)
@@ -97,7 +97,7 @@ namespace Step55
     // step-31 to convert a run-time exception into a failed assertion
     // should the inner solver not converge.
     template <class Matrix, class Preconditioner>
-    class InverseMatrix : public Subscriptor
+    class InverseMatrix : public EnableRefCountingByObserverPointer
     {
     public:
       InverseMatrix(const Matrix &m, const Preconditioner &preconditioner);
@@ -145,7 +145,8 @@ namespace Step55
     // The class A template class for a simple block diagonal preconditioner
     // for 2x2 matrices.
     template <class PreconditionerA, class PreconditionerS>
-    class BlockDiagonalPreconditioner : public Subscriptor
+    class BlockDiagonalPreconditioner
+      : public EnableRefCountingByObserverPointer
     {
     public:
       BlockDiagonalPreconditioner(const PreconditionerA &preconditioner_A,
index 6eb6cba25ac20dff05d951b0f2f31e7466a992d7..a047f5e1d48fa474e50db88f3e7d07251bb13740 100644 (file)
@@ -301,7 +301,7 @@ namespace Step56
   // Notice how we keep track of the sum of the inner iterations
   // (preconditioner applications).
   template <class PreconditionerAType, class PreconditionerSType>
-  class BlockSchurPreconditioner : public Subscriptor
+  class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
   {
   public:
     BlockSchurPreconditioner(
index 68f03e665de90bd37f22ba4379f2318edcf7887a..2a779e0aa4e01273da70aba0f8e1383f5704aedc 100644 (file)
@@ -182,7 +182,7 @@ namespace Step57
   // positive definite, we can use CG to solve the corresponding linear
   // system.
   template <class PreconditionerMp>
-  class BlockSchurPreconditioner : public Subscriptor
+  class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
   {
   public:
     BlockSchurPreconditioner(double                           gamma,
index e6b128af1c0e55487d2e8522ff687aa78222eb6b..f0490e671a9786165be687ffb2bcb98795b435d0 100644 (file)
@@ -147,9 +147,9 @@ namespace Step59
   // MatrixFreeOperators::Base because we want to present some additional
   // features of MatrixFree::loop() that are not available in the
   // general-purpose class MatrixFreeOperators::Base. We derive the class from
-  // the Subscriptor class to be able to use the operator within the Chebyshev
-  // preconditioner because that preconditioner stores the underlying matrix
-  // via a ObserverPointer.
+  // the EnableRefCountingByObserverPointer class to be able to use the operator
+  // within the Chebyshev preconditioner because that preconditioner stores the
+  // underlying matrix via a ObserverPointer.
   //
   // Given that we implement a complete matrix interface by hand, we need to
   // add an `initialize()` function, an `m()` function, a `vmult()` function,
@@ -160,7 +160,7 @@ namespace Step59
   // step-39.
 
   template <int dim, int fe_degree, typename number>
-  class LaplaceOperator : public Subscriptor
+  class LaplaceOperator : public EnableRefCountingByObserverPointer
   {
   public:
     using value_type = number;
index 30a68604aa3ab00313e6cecbd42d38f0c6ab8925..8a7004b056bd8320331b816f6eb96c2f07c961d4 100644 (file)
@@ -246,7 +246,7 @@ namespace Step64
   // needs to have a `vmult()` function that performs the action of
   // the linear operator on a source vector.
   template <int dim, int fe_degree>
-  class HelmholtzOperator : public Subscriptor
+  class HelmholtzOperator : public EnableRefCountingByObserverPointer
   {
   public:
     HelmholtzOperator(const DoFHandler<dim>           &dof_handler,
index f0840377bf8b40dc326601a794881e7046de7977..23b47e5628f116ecca9c8abd2a88d789fa7e4df3 100644 (file)
@@ -151,7 +151,7 @@ namespace Step66
 
   // The constructor of the <code>JacobianOperator</code> just calls the
   // constructor of the base class MatrixFreeOperators::Base, which is itself
-  // derived from the Subscriptor class.
+  // derived from the EnableRefCountingByObserverPointer class.
   template <int dim, int fe_degree, typename number>
   JacobianOperator<dim, fe_degree, number>::JacobianOperator()
     : MatrixFreeOperators::Base<dim,
index 8f8f5763da4b5494a755c06dc19ca96413ecfb5e..169d4e0c5ad88bcdfba8c66cada198602e6f3be1 100644 (file)
@@ -359,20 +359,22 @@ namespace Step7
     // still active references to an object and the object is still alive
     // from the point of view of a using object. Basically, the method is along
     // the following line: all objects that are subject to such potentially
-    // dangerous pointers are derived from a class called Subscriptor. For
-    // example, the Triangulation, DoFHandler, and a base class of the
-    // FiniteElement class are derived from Subscriptor. This latter class
-    // does not offer much functionality, but it has a built-in counter which
-    // we can subscribe to, thus the name of the class. Whenever we initialize
-    // a pointer to that object, we can increase its use counter, and when we
-    // move away our pointer or do not need it any more, we decrease the
-    // counter again. This way, we can always check how many objects still use
-    // that object. Additionally, the class requires to know about a pointer
-    // that it can use to tell the subscribing object about its invalidation.
+    // dangerous pointers are derived from a class called
+    // EnableRefCountingByObserverPointer. For example, the Triangulation,
+    // DoFHandler, and a base class of the FiniteElement class are derived from
+    // EnableRefCountingByObserverPointer. This latter class does not offer much
+    // functionality, but it has a built-in counter which we can subscribe to,
+    // thus the name of the class. Whenever we initialize a pointer to that
+    // object, we can increase its use counter, and when we move away our
+    // pointer or do not need it any more, we decrease the counter again. This
+    // way, we can always check how many objects still use that object.
+    // Additionally, the class requires to know about a pointer that it can use
+    // to tell the subscribing object about its invalidation.
     //
-    // If an object of a class that is derived from the Subscriptor class is
-    // destroyed, it also has to call the destructor of the Subscriptor class.
-    // In this destructor, we tell all the subscribing objects about the
+    // If an object of a class that is derived from the
+    // EnableRefCountingByObserverPointer class is destroyed, it also has to
+    // call the destructor of the EnableRefCountingByObserverPointer class. In
+    // this destructor, we tell all the subscribing objects about the
     // invalidation of the object using the stored pointers. The same happens
     // when the object appears on the right hand side of a move expression,
     // i.e., it will no longer contain valid content after the operation. The
index 520ea00babbd1e70654408e482bd7ac0b3e3b9d5..3c8a5496d14e8ffd86c6f448f424e15a0446ffda 100644 (file)
@@ -213,7 +213,7 @@ namespace Step75
   // points. Here, we introduce an alias to FEEvaluation with the correct
   // template parameters so that we do not have to worry about them later on.
   template <int dim, typename number>
-  class LaplaceOperator : public Subscriptor
+  class LaplaceOperator : public EnableRefCountingByObserverPointer
   {
   public:
     using VectorType = LinearAlgebra::distributed::Vector<number>;
index c7ece4db05d5cccce8554859b0b865a94bd54eb9..e2a5be2fdd28da466bb1e460d2929675ad3b55fd 100644 (file)
@@ -190,7 +190,7 @@ writes into the `values` member variable. If the class had more member
 variables, one would list them one after the other. The same is true
 if a class has base classes. For example, here is the corresponding
 function for the Quadrature class that stores quadrature points and
-weights, and is derived from the Subscriptor base class:
+weights, and is derived from the EnableRefCountingByObserverPointer base class:
 @code
 template <int dim>
 template <class Archive>
@@ -198,7 +198,7 @@ inline void
 Quadrature<dim>::serialize(Archive &ar, const unsigned int)
 {
   // Forward to the (de)serialization function in the base class:
-  ar & static_cast<Subscriptor &>(*this);
+  ar & static_cast<EnableRefCountingByObserverPointer &>(*this);
 
   // Then (de)serialize the member variables:
   ar & quadrature_points & weights;
index b1e257a020ab1e2b69ee50def0fa44ccc9462eeb..05a1409c02fd8794abb18046b491f19716bf426c 100644 (file)
@@ -32,7 +32,7 @@ DEAL_II_NAMESPACE_OPEN
  *
  * @todo GK: Deprecate access to AnyData by index and change to a map.
  */
-class AnyData : public Subscriptor
+class AnyData : public EnableRefCountingByObserverPointer
 {
 public:
   /// Default constructor for empty object
index 04ae26bbe71d8cd79f2b586694061698dc6716bb..ac0054888747ae1834ae60ed32f8fba9d3ccc040 100644 (file)
@@ -38,7 +38,7 @@ DEAL_II_NAMESPACE_OPEN
  *
  * When using this class, please cite @cite SartoriGiulianiBardelloni-2018-a.
  */
-class GeneralDataStorage : public Subscriptor
+class GeneralDataStorage : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 8768f85f43e743b6565803c35358fd7a512ce7ca..ec2779fa80b8f6387b25158ea4854a53ba5c5420 100644 (file)
@@ -62,7 +62,7 @@ namespace Algorithms
    * providing additional information and forwarded to the inner Operator
    * objects of the nested iteration.
    */
-  class OperatorBase : public Subscriptor
+  class OperatorBase : public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -101,7 +101,7 @@ namespace Algorithms
    * in each step of an iteration.
    */
   template <typename VectorType>
-  class OutputOperator : public Subscriptor
+  class OutputOperator : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index f15fd01aaad0dd8882b01698fa77f30138e9c762..8cd5fbbdb657bf30e0f90e3e5645303b908fa384 100644 (file)
@@ -57,7 +57,7 @@ namespace Algorithms
    * with a more modern interface and better programming guarantees. Consider
    * using DiscreteTime instead of TimestepControl.
    */
-  class TimestepControl : public Subscriptor
+  class TimestepControl : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 36cd270d6ed43e6fc20a2abd7b05dc015481176b..7ee925649a8d3ba6561292c21d1ad7aaa13cf08c 100644 (file)
@@ -148,7 +148,7 @@ class TensorFunction;
 template <int dim, typename RangeNumberType = double>
 class Function : public FunctionTime<
                    typename numbers::NumberTraits<RangeNumberType>::real_type>,
-                 public Subscriptor
+                 public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 06783e084330268619bcd1fe6039939f2f118477..69c77f1e530cef560c7dd5c54cdd0b55849f909d 100644 (file)
@@ -77,7 +77,7 @@ DEAL_II_NAMESPACE_OPEN
  *
  * @ingroup textoutput
  */
-class LogStream : public Subscriptor
+class LogStream : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 023fc675c538835335f85b605b5996630f10963d..356ab00922900a809edc0273370e5bf19618ebdd 100644 (file)
@@ -45,7 +45,7 @@ DEAL_II_NAMESPACE_OPEN
  * @ingroup data
  */
 template <class Object>
-class MGLevelObject : public Subscriptor
+class MGLevelObject : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index d030dab065307b1c6cf7716165bacaa1fa2b82d2..9cf0290d58502bf648e143b4b70bfe54aca92f50 100644 (file)
@@ -45,10 +45,10 @@ DEAL_II_NAMESPACE_OPEN
  * through casting), but they make sure that the object pointed to is not
  * deleted or moved from in the course of use of the pointer by signaling the
  * pointee its use. This is achieved by keeping a use count for the pointed-to
- * object (which for this purpose needs to be derived from the Subscriptor
- * class), and ensuring that the pointed-to object's destructor triggers an
- * error if that use-count is larger than zero -- i.e., if there are still
- * observing ObserverPointer objects pointing to it.
+ * object (which for this purpose needs to be derived from the
+ * EnableRefCountingByObserverPointer class), and ensuring that the pointed-to
+ * object's destructor triggers an error if that use-count is larger than zero
+ * -- i.e., if there are still observing ObserverPointer objects pointing to it.
  *
  * Conceptually, ObserverPointer fills a gap between `std::unique_ptr` and
  * `std::shared_ptr`. While the former makes it clear that there is a unique
@@ -96,7 +96,8 @@ DEAL_II_NAMESPACE_OPEN
  *   to a constant object (disallowing write access when dereferenced), while
  *   `ObserverPointer<T>` is a mutable pointer.
  *
- * @dealiiConceptRequires{std::is_base_of_v<Subscriptor, T>}
+ * @dealiiConceptRequires{std::is_base_of_v<EnableRefCountingByObserverPointer,
+ * T>}
  *
  * @ingroup memory
  */
@@ -133,8 +134,9 @@ public:
    * not a null pointer, the constructor subscribes to the given object to
    * lock it, i.e. to prevent its destruction before the end of its use.
    *
-   * The <tt>id</tt> is used in the call to Subscriptor::subscribe(id) and by
-   * ~ObserverPointer() in the call to Subscriptor::unsubscribe().
+   * The <tt>id</tt> is used in the call to
+   * EnableRefCountingByObserverPointer::subscribe(id) and by ~ObserverPointer()
+   * in the call to EnableRefCountingByObserverPointer::unsubscribe().
    */
   ObserverPointer(T *t, const std::string &id);
 
@@ -281,9 +283,10 @@ inline ObserverPointer<T, P>::ObserverPointer()
   , id(typeid(P).name())
   , pointed_to_object_is_alive(false)
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 }
 
 
@@ -294,9 +297,10 @@ inline ObserverPointer<T, P>::ObserverPointer(T *t)
   , id(typeid(P).name())
   , pointed_to_object_is_alive(false)
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 
   if (t != nullptr)
     t->subscribe(&pointed_to_object_is_alive, id);
@@ -310,9 +314,10 @@ inline ObserverPointer<T, P>::ObserverPointer(T *t, const std::string &id)
   , id(id)
   , pointed_to_object_is_alive(false)
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 
   if (pointer != nullptr)
     pointer->subscribe(&pointed_to_object_is_alive, id);
@@ -328,9 +333,10 @@ inline ObserverPointer<T, P>::ObserverPointer(
   , id(other.id)
   , pointed_to_object_is_alive(false)
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 
   if (other != nullptr)
     {
@@ -350,9 +356,10 @@ inline ObserverPointer<T, P>::ObserverPointer(
   , id(other.id)
   , pointed_to_object_is_alive(false)
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 
   if (other != nullptr)
     {
@@ -372,9 +379,10 @@ inline ObserverPointer<T, P>::ObserverPointer(
   , id(other.id)
   , pointed_to_object_is_alive(false)
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 
   if (other != nullptr)
     {
@@ -406,9 +414,10 @@ inline ObserverPointer<T, P>::ObserverPointer(
 template <typename T, typename P>
 inline ObserverPointer<T, P>::~ObserverPointer()
 {
-  static_assert(std::is_base_of_v<Subscriptor, T>,
-                "This class can only be used if the first template argument "
-                "is a class derived from 'Subscriptor'.");
+  static_assert(
+    std::is_base_of_v<EnableRefCountingByObserverPointer, T>,
+    "This class can only be used if the first template argument "
+    "is a class derived from 'EnableRefCountingByObserverPointer'.");
 
   if (pointed_to_object_is_alive && pointer != nullptr)
     pointer->unsubscribe(&pointed_to_object_is_alive, id);
index 24046f3a5ca9f11250193a1112ef1947df688277..4767f6cd6aa3a1275e675e33e8ba6dba7d0e67f6 100644 (file)
@@ -355,7 +355,7 @@ namespace internal
  *
  * See the tutorial program step-60 for an example on how to use this class.
  */
-class ParameterAcceptor : public Subscriptor
+class ParameterAcceptor : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 181785e102e3cb1ed42972b19ab4eaf1c6383b21..c373a702b5b859197188668bdd738a90e515d9a7 100644 (file)
@@ -851,7 +851,7 @@ class MultipleParameterLoop;
  *
  * @ingroup input
  */
-class ParameterHandler : public Subscriptor
+class ParameterHandler : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -2330,7 +2330,7 @@ ParameterHandler::save(Archive &ar, const unsigned int) const
 {
   // Forward to serialization
   // function in the base class.
-  ar &static_cast<const Subscriptor &>(*this);
+  ar &static_cast<const EnableRefCountingByObserverPointer &>(*this);
 
   ar &*entries.get();
 
@@ -2350,7 +2350,7 @@ ParameterHandler::load(Archive &ar, const unsigned int)
 {
   // Forward to serialization
   // function in the base class.
-  ar &static_cast<Subscriptor &>(*this);
+  ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
 
   ar &*entries.get();
 
index a745458839a688a0a46673f787d1999fc222b55d..58464995b9e1c31cc2beae16c9b76980cfc1fddd 100644 (file)
@@ -62,7 +62,7 @@ namespace Polynomials
    * TensorProductPolynomials class.
    */
   template <typename number>
-  class Polynomial : public Subscriptor
+  class Polynomial : public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -1031,7 +1031,7 @@ namespace Polynomials
   Polynomial<number>::serialize(Archive &ar, const unsigned int)
   {
     // forward to serialization function in the base class.
-    ar &static_cast<Subscriptor &>(*this);
+    ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
     ar &coefficients;
     ar &in_lagrange_product_form;
     ar &lagrange_support_points;
index b74880b4e4d651b48621d46eecca461f5f07c754..828d53b0ac41c5156cdd3a51d99db9c49d41daa6 100644 (file)
@@ -60,7 +60,7 @@ namespace Polynomials
    * @ingroup Polynomials
    */
   template <typename number>
-  class PiecewisePolynomial : public Subscriptor
+  class PiecewisePolynomial : public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -301,7 +301,7 @@ namespace Polynomials
   PiecewisePolynomial<number>::serialize(Archive &ar, const unsigned int)
   {
     // forward to serialization function in the base class.
-    ar &static_cast<Subscriptor &>(*this);
+    ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
     ar &polynomial;
     ar &n_intervals;
     ar &interval;
index f79e9c69983bd503cae201dd21db4441d1b3be27..470153ac11514e2686925dbb4bb2c7df08b7efde 100644 (file)
@@ -119,7 +119,7 @@ DEAL_II_NAMESPACE_OPEN
  * as "list of evaluation points".
  */
 template <int dim>
-class Quadrature : public Subscriptor
+class Quadrature : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -545,7 +545,7 @@ Quadrature<dim>::serialize(Archive &ar, const unsigned int)
 {
   // forward to serialization
   // function in the base class.
-  ar &static_cast<Subscriptor &>(*this);
+  ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
 
   ar &quadrature_points &weights;
 }
index a1fa0a48f5e4e143590b38bcff6f211b46ea519c..1a93dcaa24ea231c94e0f8ba844a8209f57622fd 100644 (file)
@@ -60,7 +60,7 @@ DEAL_II_NAMESPACE_OPEN
  * for example, adopting a level-set approach to describe material behavior.
  */
 template <typename CellIteratorType, typename DataType>
-class CellDataStorage : public Subscriptor
+class CellDataStorage : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 6ee22b81bd118da152d86ba79e1e4f9eaa3d2412..1b2865d2a5d8af5feb0d63a6b4a09df8a8bc7675 100644 (file)
@@ -34,14 +34,13 @@ DEAL_II_NAMESPACE_OPEN
  *
  * This class, as a base class, allows to keep track of other objects using a
  * specific object. It is used to avoid that pointers that point to an object of
- * a class derived from Subscriptor are referenced after that object has been
- * invalidated. Here, invalidation is assumed to happen when the object is
- * moved from or destroyed.
- * The mechanism works as follows: The member function subscribe() accepts a
- * pointer to a boolean that is modified on invalidation. The object that owns
- * this pointer (usually an object of class type ObserverPointer) is then
- * expected to check the state of the boolean before trying to access this
- * class.
+ * a class derived from EnableRefCountingByObserverPointer are referenced after
+ * that object has been invalidated. Here, invalidation is assumed to happen
+ * when the object is moved from or destroyed. The mechanism works as follows:
+ * The member function subscribe() accepts a pointer to a boolean that is
+ * modified on invalidation. The object that owns this pointer (usually an
+ * object of class type ObserverPointer) is then expected to check the state of
+ * the boolean before trying to access this class.
  *
  * The utility of this class is even enhanced by providing identifying strings
  * to the functions subscribe() and unsubscribe(). These strings are represented
@@ -57,13 +56,13 @@ DEAL_II_NAMESPACE_OPEN
  *
  * @ingroup memory
  */
-class Subscriptor
+class EnableRefCountingByObserverPointer
 {
 public:
   /**
    * Constructor setting the counter to zero.
    */
-  Subscriptor();
+  EnableRefCountingByObserverPointer();
 
   /**
    * Copy-constructor.
@@ -71,20 +70,22 @@ public:
    * The counter of the copy is zero, since references point to the original
    * object.
    */
-  Subscriptor(const Subscriptor &);
+  EnableRefCountingByObserverPointer(
+    const EnableRefCountingByObserverPointer &);
 
   /**
    * Move constructor.
    *
-   * An object inheriting from Subscriptor can only be moved if no other
-   * objects are subscribing to it.
+   * An object inheriting from EnableRefCountingByObserverPointer can only be
+   * moved if no other objects are subscribing to it.
    */
-  Subscriptor(Subscriptor &&) noexcept;
+  EnableRefCountingByObserverPointer(
+    EnableRefCountingByObserverPointer &&) noexcept;
 
   /**
    * Destructor, asserting that the counter is zero.
    */
-  virtual ~Subscriptor();
+  virtual ~EnableRefCountingByObserverPointer();
 
   /**
    * Assignment operator.
@@ -92,20 +93,21 @@ public:
    * This has to be handled with care, too, because the counter has to remain
    * the same. It therefore does nothing more than returning <tt>*this</tt>.
    */
-  Subscriptor &
-  operator=(const Subscriptor &);
+  EnableRefCountingByObserverPointer &
+  operator=(const EnableRefCountingByObserverPointer &);
 
   /**
    * Move assignment operator. Only invalidates the object moved from.
    */
-  Subscriptor &
-  operator=(Subscriptor &&) noexcept;
+  EnableRefCountingByObserverPointer &
+  operator=(EnableRefCountingByObserverPointer &&) noexcept;
 
   /**
-   * @name Subscriptor functionality
+   * @name EnableRefCountingByObserverPointer functionality
    *
-   * Classes derived from Subscriptor provide a facility to subscribe to this
-   * object. This is mostly used by the ObserverPointer class.
+   * Classes derived from EnableRefCountingByObserverPointer provide a facility
+   * to subscribe to this object. This is mostly used by the ObserverPointer
+   * class.
    * @{
    */
 
@@ -173,7 +175,8 @@ public:
 
   /**
    * A subscriber with the identification string given to
-   * Subscriptor::unsubscribe() did not subscribe to the object.
+   * EnableRefCountingByObserverPointer::unsubscribe() did not subscribe to the
+   * object.
    */
   DeclException2(ExcNoSubscriber,
                  std::string,
@@ -274,22 +277,24 @@ private:
 
 //---------------------------------------------------------------------------
 
-inline Subscriptor::Subscriptor()
+inline EnableRefCountingByObserverPointer::EnableRefCountingByObserverPointer()
   : counter(0)
   , object_info(nullptr)
 {}
 
 
 
-inline Subscriptor::Subscriptor(const Subscriptor &)
+inline EnableRefCountingByObserverPointer::EnableRefCountingByObserverPointer(
+  const EnableRefCountingByObserverPointer &)
   : counter(0)
   , object_info(nullptr)
 {}
 
 
 
-inline Subscriptor &
-Subscriptor::operator=(const Subscriptor &s)
+inline EnableRefCountingByObserverPointer &
+EnableRefCountingByObserverPointer::operator=(
+  const EnableRefCountingByObserverPointer &s)
 {
   object_info = s.object_info;
   return *this;
@@ -298,7 +303,7 @@ Subscriptor::operator=(const Subscriptor &s)
 
 
 inline unsigned int
-Subscriptor::n_subscriptions() const
+EnableRefCountingByObserverPointer::n_subscriptions() const
 {
   return counter;
 }
@@ -307,7 +312,7 @@ Subscriptor::n_subscriptions() const
 
 template <class Archive>
 inline void
-Subscriptor::serialize(Archive &, const unsigned int)
+EnableRefCountingByObserverPointer::serialize(Archive &, const unsigned int)
 {
   // do nothing, as explained in the
   // documentation of this function
@@ -315,7 +320,7 @@ Subscriptor::serialize(Archive &, const unsigned int)
 
 template <typename StreamType>
 inline void
-Subscriptor::list_subscribers(StreamType &stream) const
+EnableRefCountingByObserverPointer::list_subscribers(StreamType &stream) const
 {
   std::lock_guard<std::mutex> lock(mutex);
 
index 911042c97377ea33b780fa0a7538d425dab59a6e..5336ec6e3004f71e6baad736eae797bd1872cc15 100644 (file)
@@ -437,7 +437,7 @@ namespace internal
  * @ingroup data
  */
 template <int N, typename T>
-class TableBase : public Subscriptor
+class TableBase : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = T;
@@ -2165,7 +2165,7 @@ TableBase<N, T>::TableBase(const TableIndices<N> &sizes,
 
 template <int N, typename T>
 TableBase<N, T>::TableBase(const TableBase<N, T> &src)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , values(src.values)
   , table_size(src.table_size)
 {}
@@ -2185,7 +2185,7 @@ TableBase<N, T>::TableBase(const TableBase<N, T2> &src)
 
 template <int N, typename T>
 TableBase<N, T>::TableBase(TableBase<N, T> &&src) noexcept
-  : Subscriptor(std::move(src))
+  : EnableRefCountingByObserverPointer(std::move(src))
   , values(std::move(src.values))
   , table_size(src.table_size)
 {
@@ -2199,7 +2199,7 @@ template <class Archive>
 inline void
 TableBase<N, T>::serialize(Archive &ar, const unsigned int)
 {
-  ar &static_cast<Subscriptor &>(*this);
+  ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
 
   ar &values &table_size;
 }
@@ -2342,10 +2342,11 @@ template <int N, typename T>
 inline TableBase<N, T> &
 TableBase<N, T>::operator=(TableBase<N, T> &&m) noexcept
 {
-  static_cast<Subscriptor &>(*this) = std::move(static_cast<Subscriptor &>(m));
-  values                            = std::move(m.values);
-  table_size                        = m.table_size;
-  m.table_size                      = TableIndices<N>();
+  static_cast<EnableRefCountingByObserverPointer &>(*this) =
+    std::move(static_cast<EnableRefCountingByObserverPointer &>(m));
+  values       = std::move(m.values);
+  table_size   = m.table_size;
+  m.table_size = TableIndices<N>();
 
   return *this;
 }
index e11b846d89a91c73d0541262157a2ee649eccb17..3e4dfda8e64f1cc27597ba8bbf5bf89b3a624a37 100644 (file)
@@ -54,7 +54,7 @@ DEAL_II_NAMESPACE_OPEN
 template <int rank, int dim, typename Number = double>
 class TensorFunction
   : public FunctionTime<typename numbers::NumberTraits<Number>::real_type>,
-    public Subscriptor
+    public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 7fd684dfedefb8b2852256ed3772485a7477f225..811c57b96a149a9e3d64f3d63dcab94a6cefdbc4 100644 (file)
@@ -45,7 +45,7 @@ namespace RepartitioningPolicyTools
    * See the description of RepartitioningPolicyTools for more information.
    */
   template <int dim, int spacedim = dim>
-  class Base : public Subscriptor
+  class Base : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index b1f51ddc1b3b005f19935db18d744cf8bd783138..0e5c040063ba9652b17803390cecce96bbf46294 100644 (file)
@@ -545,7 +545,8 @@ namespace internal
        * for more information about artificial cells.
        */
       template <int dim, int spacedim = dim>
-      class TemporarilyRestoreSubdomainIds : public Subscriptor
+      class TemporarilyRestoreSubdomainIds
+        : public EnableRefCountingByObserverPointer
       {
       public:
         /**
index 9593b9308c3421fe2a3017e22ec21a7fd088d596..854b2be01a054fdf85a9689bb7405842999b8d8f 100644 (file)
@@ -1113,7 +1113,8 @@ namespace parallel
      * The use of this class is demonstrated in step-75.
      */
     template <int dim, int spacedim = dim>
-    class TemporarilyMatchRefineFlags : public Subscriptor
+    class TemporarilyMatchRefineFlags
+      : public EnableRefCountingByObserverPointer
     {
     public:
       /**
index 1b9d32d9c3b38a10ffe3db298a27576ac43be933..27c598712bdeca417deae731ec1847a4fb36334e 100644 (file)
@@ -91,7 +91,7 @@ class DoFHandler;
  *
  * @ingroup dofs
  */
-class BlockInfo : public Subscriptor
+class BlockInfo : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index b8a3e344cf07b015a6c4d986a12a2551a535418a..c98c4d88e1ad3b6a7009cd0a02d70e79666b8779 100644 (file)
@@ -313,7 +313,7 @@ namespace parallel
  */
 template <int dim, int spacedim = dim>
 DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
-class DoFHandler : public Subscriptor
+class DoFHandler : public EnableRefCountingByObserverPointer
 {
   using ActiveSelector =
     dealii::internal::DoFHandlerImplementation::Iterators<dim, spacedim, false>;
index a795c35e1568f4f22e41c9cf570ef795b2384998..10d82f66b46e46edf5f0db8e1275f0b7fd3bdb24 100644 (file)
@@ -651,7 +651,8 @@ class FESystem;
  * @ingroup febase fe
  */
 template <int dim, int spacedim = dim>
-class FiniteElement : public Subscriptor, public FiniteElementData<dim>
+class FiniteElement : public EnableRefCountingByObserverPointer,
+                      public FiniteElementData<dim>
 {
 public:
   /**
index 0c0874f991c122b883284d5f942ecd1847f30862..9502429dcc19c96d5f89daa5b391d975dbc4ab4f 100644 (file)
@@ -86,7 +86,7 @@ namespace FESeries
    * $ \bf k $ .
    */
   template <int dim, int spacedim = dim>
-  class Fourier : public Subscriptor
+  class Fourier : public EnableRefCountingByObserverPointer
   {
   public:
     using CoefficientType = typename std::complex<double>;
@@ -256,7 +256,7 @@ namespace FESeries
    * $ \widetilde P_m(x) $ using tensor product rule.
    */
   template <int dim, int spacedim = dim>
-  class Legendre : public Subscriptor
+  class Legendre : public EnableRefCountingByObserverPointer
   {
   public:
     using CoefficientType = double;
index 69f0f7a7f0c74b8a1766fa8d8bb676b5dda835da..86722d9f86ba3ab795b05d5249026391fa2aa98f 100644 (file)
@@ -85,7 +85,7 @@ namespace FETools
    * FETools::add_fe_name() functions.
    */
   template <int dim, int spacedim = dim>
-  class FEFactoryBase : public Subscriptor
+  class FEFactoryBase : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 0340f47bea18afac1c0017e444b91f5e710226b7..b138eaed04ead49f42f559bec8e38c8a40664546 100644 (file)
@@ -1073,7 +1073,9 @@ namespace FETools
       template <int dim>
       void
       fill_no_codim_fe_names(
-        std::map<std::string, std::unique_ptr<const Subscriptor>> &result)
+        std::map<std::string,
+                 std::unique_ptr<const EnableRefCountingByObserverPointer>>
+          &result)
       {
         result["FE_Q_Hierarchical"] =
           std::make_unique<FETools::FEFactory<FE_Q_Hierarchical<dim>>>();
@@ -1153,7 +1155,9 @@ namespace FETools
       template <int dim, int spacedim>
       void
       fill_codim_fe_names(
-        std::map<std::string, std::unique_ptr<const Subscriptor>> &result)
+        std::map<std::string,
+                 std::unique_ptr<const EnableRefCountingByObserverPointer>>
+          &result)
       {
         result["FE_Bernstein"] =
           std::make_unique<FETools::FEFactory<FE_Bernstein<dim, spacedim>>>();
@@ -1192,13 +1196,17 @@ namespace FETools
       // fe_name_map[dimension][spacedimension] with the maps generated
       // by the functions above.
       std::array<
-        std::array<std::map<std::string, std::unique_ptr<const Subscriptor>>,
-                   4>,
+        std::array<
+          std::map<std::string,
+                   std::unique_ptr<const EnableRefCountingByObserverPointer>>,
+          4>,
         4> inline fill_default_map()
       {
         std::array<
-          std::array<std::map<std::string, std::unique_ptr<const Subscriptor>>,
-                     4>,
+          std::array<
+            std::map<std::string,
+                     std::unique_ptr<const EnableRefCountingByObserverPointer>>,
+            4>,
           4>
           result;
 
@@ -1242,14 +1250,18 @@ namespace FETools
       // compiled for all dimensions at once, need to create objects for
       // each dimension and then separate between them further down
       inline std::array<
-        std::array<std::map<std::string, std::unique_ptr<const Subscriptor>>,
-                   4>,
+        std::array<
+          std::map<std::string,
+                   std::unique_ptr<const EnableRefCountingByObserverPointer>>,
+          4>,
         4> &
       get_fe_name_map()
       {
         static std::array<
-          std::array<std::map<std::string, std::unique_ptr<const Subscriptor>>,
-                     4>,
+          std::array<
+            std::map<std::string,
+                     std::unique_ptr<const EnableRefCountingByObserverPointer>>,
+            4>,
           4>
           fe_name_map = fill_default_map();
         return fe_name_map;
@@ -2248,7 +2260,7 @@ namespace FETools
     std::unique_lock<std::shared_mutex> lock(
       internal::FEToolsAddFENameHelper::fe_name_map_lock);
     internal::FEToolsAddFENameHelper::get_fe_name_map()[dim][spacedim].emplace(
-      name, std::unique_ptr<const Subscriptor>(factory));
+      name, std::unique_ptr<const EnableRefCountingByObserverPointer>(factory));
   }
 
 
@@ -2265,7 +2277,9 @@ namespace FETools
       std::unique_ptr<FiniteElement<dim, spacedim>>
       get_fe_by_name_ext(
         std::string &name,
-        const std::map<std::string, std::unique_ptr<const Subscriptor>>
+        const std::map<
+          std::string,
+          std::unique_ptr<const EnableRefCountingByObserverPointer>>
           &fe_name_map)
       {
         // Extract the name of the
@@ -2385,7 +2399,8 @@ namespace FETools
             // argument, which defaults to 1,
             // so this properly returns
             // FE_Nothing()
-            const Subscriptor *ptr = fe_name_map.find(name_part)->second.get();
+            const EnableRefCountingByObserverPointer *ptr =
+              fe_name_map.find(name_part)->second.get();
             const FETools::FEFactoryBase<dim, spacedim> *fef =
               dynamic_cast<const FETools::FEFactoryBase<dim, spacedim> *>(ptr);
             return fef->get(1);
@@ -2410,7 +2425,7 @@ namespace FETools
                 const std::pair<int, unsigned int> tmp =
                   Utilities::get_integer_at_position(name, 0);
                 name.erase(0, tmp.second + 1);
-                const Subscriptor *ptr =
+                const EnableRefCountingByObserverPointer *ptr =
                   fe_name_map.find(name_part)->second.get();
                 const FETools::FEFactoryBase<dim, spacedim> *fef =
                   dynamic_cast<const FETools::FEFactoryBase<dim, spacedim> *>(
@@ -2428,7 +2443,7 @@ namespace FETools
                       Utilities::get_integer_at_position(name, 0);
                     // delete "))"
                     name.erase(0, tmp.second + 2);
-                    const Subscriptor *ptr =
+                    const EnableRefCountingByObserverPointer *ptr =
                       fe_name_map.find(name_part)->second.get();
                     const FETools::FEFactoryBase<dim, spacedim> *fef =
                       dynamic_cast<
@@ -2441,7 +2456,7 @@ namespace FETools
                       Utilities::get_integer_at_position(name, 0);
                     // delete "))"
                     name.erase(0, tmp.second + 2);
-                    const Subscriptor *ptr =
+                    const EnableRefCountingByObserverPointer *ptr =
                       fe_name_map.find(name_part)->second.get();
                     const FETools::FEFactoryBase<dim, spacedim> *fef =
                       dynamic_cast<
@@ -2463,7 +2478,7 @@ namespace FETools
                       Utilities::get_integer_at_position(name, 0);
                     // delete "))"
                     name.erase(0, tmp.second + 2);
-                    const Subscriptor *ptr =
+                    const EnableRefCountingByObserverPointer *ptr =
                       fe_name_map.find(name_part)->second.get();
                     const FETools::FEFactoryBase<dim, spacedim> *fef =
                       dynamic_cast<
index 9d9175f8b0bf0c41415b5965404ecf0369e98cd9..d62f9b38343b1f6b20efa289eba84510fcc99836 100644 (file)
@@ -151,7 +151,7 @@ DEAL_II_NAMESPACE_OPEN
  * @ingroup feaccess
  */
 template <int dim, int spacedim>
-class FEValuesBase : public Subscriptor
+class FEValuesBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 0681682686ef66effe11bdc467ef3d8b75f015ce..603328566732eb420341a1177f58efe339326ad8 100644 (file)
@@ -314,7 +314,7 @@ enum MappingKind
  * @ingroup mapping
  */
 template <int dim, int spacedim = dim>
-class Mapping : public Subscriptor
+class Mapping : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 98ccfc25a9ba0f0abcfccff4759f31b15e6f94a7..76601ae89a2c47d7a7b7cc6e5e1f4fcace72150b 100644 (file)
@@ -63,7 +63,7 @@ namespace GridTools
    * method mark_for_update() manually.
    */
   template <int dim, int spacedim = dim>
-  class Cache : public Subscriptor
+  class Cache : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 00807fdecd9a2a897fdff6eba3167e1cf0b02deb..4a8dca068cab0c8e9114e68c8027bf912fe97a03 100644 (file)
@@ -113,7 +113,7 @@ DEAL_II_NAMESPACE_OPEN
  */
 template <typename MeshType>
 DEAL_II_CXX20_REQUIRES(concepts::is_triangulation_or_dof_handler<MeshType>)
-class InterGridMap : public Subscriptor
+class InterGridMap : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 623288d1585ab8a064fd2a58b8d7ff929fb96fd6..e4ef3851a0cc64d85272d2062e3112ad3d0d5358 100644 (file)
@@ -282,7 +282,7 @@ namespace Manifolds
  * @ingroup manifold
  */
 template <int dim, int spacedim = dim>
-class Manifold : public Subscriptor
+class Manifold : public EnableRefCountingByObserverPointer
 {
 public:
   // explicitly check for sensible template arguments
index 9b914d0d4bd08113aa247bd690c7cecb35b22b13..be1d29e24603ee94caa86970e1c28bf5c28ad0d4 100644 (file)
@@ -1319,7 +1319,7 @@ namespace internal
  */
 template <int dim, int spacedim = dim>
 DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
-class Triangulation : public Subscriptor
+class Triangulation : public EnableRefCountingByObserverPointer
 {
 private:
   /**
index 0f65f10a9842849e04b16d4eb8e85f0e42d2b8e8..ecf5960c893994522ffadffb4d2f12e27bd8b6d4 100644 (file)
@@ -221,7 +221,7 @@ namespace hp
    * @ingroup hp hpcollection
    */
   template <typename T>
-  class Collection : public Subscriptor
+  class Collection : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 84d86087811edb7d3585733cfd352d1e4fd7c027..e4d86ac99c3eb7920cfa7a2a8baf78ba221a5672 100644 (file)
@@ -64,7 +64,7 @@ namespace hp
    * @ingroup hp
    */
   template <int dim, int q_dim, typename FEValuesType>
-  class FEValuesBase : public Subscriptor
+  class FEValuesBase : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 2e5f17b63c49ee73bf6137f5a74e20d97b8ffa1a..1c01e178b417ccddef32984f9ada1060ec1062b0 100644 (file)
@@ -503,7 +503,7 @@ namespace internal
  * @ingroup constraints
  */
 template <typename number = double>
-class AffineConstraints : public Subscriptor
+class AffineConstraints : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -2370,7 +2370,7 @@ inline AffineConstraints<number>::AffineConstraints(
 template <typename number>
 inline AffineConstraints<number>::AffineConstraints(
   const AffineConstraints &affine_constraints)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , lines(affine_constraints.lines)
   , lines_cache(affine_constraints.lines_cache)
   , locally_owned_dofs(affine_constraints.locally_owned_dofs)
index 409d90935a46bd8a321752125077c1ad812dcd7b..97c3c0da26b5ffaa6623760ffd8df1303e10359f 100644 (file)
@@ -163,7 +163,7 @@ dseupd_(int          *rvec,
  * @ref step_36 "step-36"
  * for an example.
  */
-class ArpackSolver : public Subscriptor
+class ArpackSolver : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 1d813533b94899f4dabb573505292d0499e8bb6c..59903b54e9e62c8af5abcf9aea7188bbcc92410a 100644 (file)
@@ -56,7 +56,7 @@ DEAL_II_NAMESPACE_OPEN
  * @see
  * @ref GlossBlockLA "Block (linear algebra)"
  */
-class BlockIndices : public Subscriptor
+class BlockIndices : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 0e22b3e1ae4c97614827591c35d69edd2d614c5b..86601ea0f6429f44a32a2ff232faf0206348836f 100644 (file)
@@ -346,7 +346,7 @@ namespace BlockMatrixIterators
  * @ref GlossBlockLA "Block (linear algebra)"
  */
 template <typename MatrixType>
-class BlockMatrixBase : public Subscriptor
+class BlockMatrixBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 464e148c9a920af2bc6ebca062e0dbd762328936..90f5a0045dde2bd455063014449de5fda30fb3f7 100644 (file)
@@ -57,7 +57,7 @@ class BlockVector;
  * @ref GlossBlockLA "Block (linear algebra)"
  */
 template <typename Number>
-class BlockSparseMatrixEZ : public Subscriptor
+class BlockSparseMatrixEZ : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 6c34c89d73dddc23142d9ef123c429420bec456d..7467ff1330b83ac76658ed858e14d69f28e404a7 100644 (file)
@@ -82,7 +82,7 @@ BlockSparseMatrixEZ<number>::operator=(const double d)
 template <typename number>
 BlockSparseMatrixEZ<number>::BlockSparseMatrixEZ(
   const BlockSparseMatrixEZ<number> &m)
-  : Subscriptor(m)
+  : EnableRefCountingByObserverPointer(m)
   , row_indices(m.row_indices)
   , column_indices(m.column_indices)
   , blocks(m.blocks)
index 01390fde394fc00561e502a10fbbcc3ac8ed9912..cc6a9eae3a937a0b6179c435fa91c20da637f4e6 100644 (file)
@@ -438,7 +438,7 @@ namespace internal
  * @ref GlossBlockLA "Block (linear algebra)"
  */
 template <typename VectorType>
-class BlockVectorBase : public Subscriptor,
+class BlockVectorBase : public EnableRefCountingByObserverPointer,
                         public ReadVector<typename VectorType::value_type>
 {
 public:
index 41e06921dae63cf25a557754964dc2b1f509ec80..4fa5e1bbd9f2634e34416b7df94b69378f21f7a2 100644 (file)
@@ -445,7 +445,7 @@ DEAL_II_NAMESPACE_OPEN
  * in the manual).
  */
 template <typename number>
-class ChunkSparseMatrix : public virtual Subscriptor
+class ChunkSparseMatrix : public virtual EnableRefCountingByObserverPointer
 {
 public:
   /**
index 88df344726eea1fd5fbd6351eda34445ab6f162a..960b6f4fa1a433bcdc48a375a288003e6ce0d5c6 100644 (file)
@@ -279,7 +279,7 @@ ChunkSparseMatrix<number>::ChunkSparseMatrix()
 
 template <typename number>
 ChunkSparseMatrix<number>::ChunkSparseMatrix(const ChunkSparseMatrix &m)
-  : Subscriptor(m)
+  : EnableRefCountingByObserverPointer(m)
   , cols(nullptr, "ChunkSparseMatrix")
   , val(nullptr)
   , max_len(0)
index 9debee1c4cfc6056769338e73682d3122cb7addb..04398886da58bdff94399ce4e3ed89d7f8883149 100644 (file)
@@ -241,7 +241,7 @@ namespace ChunkSparsityPatternIterators
  *
  * The use of this class is demonstrated in step-51.
  */
-class ChunkSparsityPattern : public Subscriptor
+class ChunkSparsityPattern : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 1763c2311632ca584654c104f81ccaab9d3f3dd9..e1a8daab0ff6db484d099d136ae518eed5df824f 100644 (file)
@@ -58,7 +58,7 @@ namespace LinearAlgebra
  * @endcode
  */
 template <typename VectorType = Vector<double>>
-class DiagonalMatrix : public Subscriptor
+class DiagonalMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = typename VectorType::value_type;
index 3a287bcdffb8364a72b717782c0df3f17f12e37f..4237eab256d7e3c17e096ada1d49ac87a1926543 100644 (file)
@@ -246,7 +246,8 @@ namespace LinearAlgebra
      * @endcode
      */
     template <typename Number, typename MemorySpace = MemorySpace::Host>
-    class Vector : public ::dealii::ReadVector<Number>, public Subscriptor
+    class Vector : public ::dealii::ReadVector<Number>,
+                   public EnableRefCountingByObserverPointer
     {
     public:
       using memory_space    = MemorySpace;
index 1072c6fc7c357ac5c535e10f0c51497838e918c9..1b2799df6fa72a320a47a67ec394919d0b9ca73d 100644 (file)
@@ -730,7 +730,7 @@ namespace LinearAlgebra
     template <typename Number, typename MemorySpaceType>
     Vector<Number, MemorySpaceType>::Vector(
       const Vector<Number, MemorySpaceType> &v)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , allocated_size(0)
       , vector_is_ghosted(false)
       , comm_sm(MPI_COMM_SELF)
@@ -749,7 +749,8 @@ namespace LinearAlgebra
       Vector<Number, MemorySpaceType> &&v)
       : Vector()
     {
-      static_cast<Subscriptor &>(*this) = static_cast<Subscriptor &&>(v);
+      static_cast<EnableRefCountingByObserverPointer &>(*this) =
+        static_cast<EnableRefCountingByObserverPointer &&>(v);
       this->swap(v);
     }
 
@@ -1427,7 +1428,8 @@ namespace LinearAlgebra
     Vector<Number, MemorySpaceType>::operator=( // NOLINT
       Vector<Number, MemorySpaceType> &&v)
     {
-      static_cast<Subscriptor &>(*this) = static_cast<Subscriptor &&>(v);
+      static_cast<EnableRefCountingByObserverPointer &>(*this) =
+        static_cast<EnableRefCountingByObserverPointer &&>(v);
       this->swap(v);
       return *this;
     }
index 137465ff02501a2bc061aca6dd5f8ff9b10ed774..05a273ca4b0293176465ae62c92de7000b9fd9fd 100644 (file)
@@ -1007,7 +1007,7 @@ private:
  * @ingroup Preconditioners
  */
 template <typename number>
-class PreconditionLU : public Subscriptor
+class PreconditionLU : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 44dda3c1d6d4e34bffb8e813d9a92920f8060439..748dd7e0f4e56501d2eaf5e851f5d3d3f753944b 100644 (file)
@@ -89,7 +89,7 @@ namespace internal
  * @ref GlossBlockLA "Block (linear algebra)"
  */
 template <typename MatrixType>
-class MatrixBlock : public Subscriptor
+class MatrixBlock : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -419,7 +419,7 @@ public:
  * @ingroup vector_valued
  */
 template <typename MatrixType>
-class MGMatrixBlockVector : public Subscriptor
+class MGMatrixBlockVector : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 479e0393a137daceba64a0b5b4e401eaa683b37d..ee7408274d5f9ed851d722f16f8639452a3c7fe7 100644 (file)
@@ -207,7 +207,7 @@ extern "C"
  * PARPACK manual.
  */
 template <typename VectorType>
-class PArpackSolver : public Subscriptor
+class PArpackSolver : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 4e87ac7d36b0d5ab37f3e2ddaf5e8ef17d8c40c0..bc49ceb78896f94e094e5cf14660b1b3b12cbd9a 100644 (file)
@@ -291,7 +291,7 @@ namespace PETScWrappers
    * @ingroup PETScWrappers
    * @ingroup Matrix1
    */
-  class MatrixBase : public Subscriptor
+  class MatrixBase : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 75535f9fbe5024d97062754116c86e6b24b37d75..6869f1641991a19491116d88e3aa646bc0f75f61 100644 (file)
@@ -56,7 +56,7 @@ namespace PETScWrappers
    *
    * @ingroup PETScWrappers
    */
-  class PreconditionBase : public Subscriptor
+  class PreconditionBase : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index ff6b9c4cdf6e58ea091ba5a78de45e979c677d95..a2afbbf872e9fbae74d2c4095b70fb441d1d095f 100644 (file)
@@ -170,7 +170,7 @@ namespace PETScWrappers
    * methods:
    *
    * @code
-   * class VectorType : public Subscriptor
+   * class VectorType : public EnableRefCountingByObserverPointer
    *    ...
    *    explicit VectorType(Vec);
    *    ...
@@ -179,7 +179,7 @@ namespace PETScWrappers
    * @endcode
    *
    * @code
-   * class MatrixType : public Subscriptor
+   * class MatrixType : public EnableRefCountingByObserverPointer
    *    ...
    *    explicit MatrixType(Mat);
    *    ...
index 666556d3be29e687bd0d7fe1795f69af2b4f34ef..9ac5f5b561ba078a4e4693b825f4e22473637001 100644 (file)
@@ -239,7 +239,7 @@ namespace PETScWrappers
    * methods:
    *
    * @code
-   * class VectorType : public Subscriptor
+   * class VectorType : public EnableRefCountingByObserverPointer
    *    ...
    *    explicit VectorType(Vec);
    *    ...
@@ -248,7 +248,7 @@ namespace PETScWrappers
    * @endcode
    *
    * @code
-   * class MatrixType : public Subscriptor
+   * class MatrixType : public EnableRefCountingByObserverPointer
    *    ...
    *    explicit MatrixType(Mat);
    *    ...
index 964507c7e1c6459431513c8d7370601f6bf9fcc8..e94d47cdcd19e2a939095c0cc04f44e92094831f 100644 (file)
@@ -249,7 +249,8 @@ namespace PETScWrappers
    *
    * @ingroup PETScWrappers
    */
-  class VectorBase : public ReadVector<PetscScalar>, public Subscriptor
+  class VectorBase : public ReadVector<PetscScalar>,
+                     public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -1321,7 +1322,7 @@ namespace PETScWrappers
   VectorBase::save(Archive &ar, const unsigned int) const
   {
     // forward to serialization function in the base class.
-    ar &static_cast<const Subscriptor &>(*this);
+    ar &static_cast<const EnableRefCountingByObserverPointer &>(*this);
     ar &size();
     ar &local_range();
 
@@ -1343,7 +1344,7 @@ namespace PETScWrappers
   inline void
   VectorBase::load(Archive &ar, const unsigned int)
   {
-    ar &static_cast<Subscriptor &>(*this);
+    ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
 
     size_type                       size = 0;
     std::pair<size_type, size_type> local_range;
index 5d19f829555dc45ada7556a65f58d04e32a9c794..1078656c4ff41620e8494a4a364b2b410e3a8162 100644 (file)
@@ -215,7 +215,7 @@ namespace internal
  * Alternatively, the IdentityMatrix class can be used to precondition in this
  * way.
  */
-class PreconditionIdentity : public Subscriptor
+class PreconditionIdentity : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -330,7 +330,7 @@ private:
  * multiplied. Still, this class is useful in multigrid smoother objects
  * (MGSmootherRelaxation).
  */
-class PreconditionRichardson : public Subscriptor
+class PreconditionRichardson : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -494,7 +494,7 @@ private:
  */
 template <typename MatrixType = SparseMatrix<double>,
           typename VectorType = Vector<double>>
-class PreconditionUseMatrix : public Subscriptor
+class PreconditionUseMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -562,7 +562,7 @@ private:
  */
 template <typename MatrixType         = SparseMatrix<double>,
           typename PreconditionerType = IdentityMatrix>
-class PreconditionRelaxation : public Subscriptor
+class PreconditionRelaxation : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -2025,13 +2025,14 @@ public:
  *
  * <h4>Requirements on the templated classes</h4>
  *
- * The class `MatrixType` must be derived from Subscriptor because a
- * ObserverPointer to `MatrixType` is held in the class. In particular, this
- * means that the matrix object needs to persist during the lifetime of
- * PreconditionChebyshev. The preconditioner is held in a shared_ptr that is
- * copied into the AdditionalData member variable of the class, so the
- * variable used for initialization can safely be discarded after calling
- * initialize(). Both the matrix and the preconditioner need to provide
+ * The class `MatrixType` must be derived from
+ * EnableRefCountingByObserverPointer because a ObserverPointer to `MatrixType`
+ * is held in the class. In particular, this means that the matrix object needs
+ * to persist during the lifetime of PreconditionChebyshev. The preconditioner
+ * is held in a shared_ptr that is copied into the AdditionalData member
+ * variable of the class, so the variable used for initialization can safely be
+ * discarded after calling initialize(). Both the matrix and the preconditioner
+ * need to provide
  * @p vmult() functions for the matrix-vector product and @p m() functions for
  * accessing the number of rows in the (square) matrix. Furthermore, the
  * matrix must provide <tt>el(i,i)</tt> methods for accessing the matrix
@@ -2100,7 +2101,7 @@ public:
 template <typename MatrixType         = SparseMatrix<double>,
           typename VectorType         = Vector<double>,
           typename PreconditionerType = DiagonalMatrix<VectorType>>
-class PreconditionChebyshev : public Subscriptor
+class PreconditionChebyshev : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 3f94cc5001d17d7092218f0142f3784087298b3e..045b3e0cbac83a8b6f4edb44f52346faa4ba339d 100644 (file)
@@ -78,7 +78,7 @@ DEAL_II_NAMESPACE_OPEN
  */
 template <typename MatrixType,
           typename inverse_type = typename MatrixType::value_type>
-class PreconditionBlock : public virtual Subscriptor,
+class PreconditionBlock : public virtual EnableRefCountingByObserverPointer,
                           protected PreconditionBlockBase<inverse_type>
 {
 private:
@@ -376,7 +376,7 @@ protected:
 template <typename MatrixType,
           typename inverse_type = typename MatrixType::value_type>
 class PreconditionBlockJacobi
-  : public virtual Subscriptor,
+  : public virtual EnableRefCountingByObserverPointer,
     private PreconditionBlock<MatrixType, inverse_type>
 {
 private:
@@ -653,7 +653,7 @@ private:
 template <typename MatrixType,
           typename inverse_type = typename MatrixType::value_type>
 class PreconditionBlockSOR
-  : public virtual Subscriptor,
+  : public virtual EnableRefCountingByObserverPointer,
     protected PreconditionBlock<MatrixType, inverse_type>
 {
 public:
@@ -810,7 +810,7 @@ protected:
 template <typename MatrixType,
           typename inverse_type = typename MatrixType::value_type>
 class PreconditionBlockSSOR
-  : public virtual Subscriptor,
+  : public virtual EnableRefCountingByObserverPointer,
     private PreconditionBlockSOR<MatrixType, inverse_type>
 {
 public:
index 516395edd617746f14994ef439c65ba538677b48..b172d731f4e1854917b62f584ef36d244aaab1d8 100644 (file)
@@ -97,7 +97,7 @@ class SparseMatrix;
  */
 template <typename MatrixType = SparseMatrix<double>,
           typename VectorType = dealii::Vector<double>>
-class PreconditionSelector : public Subscriptor
+class PreconditionSelector : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index d236cf9135bce357eb463b190e8c8cd8241aca81..d43ae09a32774e2ccfcade55263f0b2a17548f24 100644 (file)
@@ -123,7 +123,8 @@ namespace LinearAlgebra
    * get the first index of the largest range.
    */
   template <typename Number>
-  class ReadWriteVector : public Subscriptor, public ReadVector<Number>
+  class ReadWriteVector : public EnableRefCountingByObserverPointer,
+                          public ReadVector<Number>
   {
   public:
     /**
@@ -846,7 +847,7 @@ namespace LinearAlgebra
   template <typename Number>
   inline ReadWriteVector<Number>::ReadWriteVector(
     const ReadWriteVector<Number> &v)
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
   {
     this->operator=(v);
   }
index da2ac473cbd5a39f1b289b43504a41d9e253bc59..15c8d3262d5b02353f715f173477342651950c03 100644 (file)
@@ -77,7 +77,7 @@ public:
    * structure in #block_list and an optional ordering of the blocks in
    * #order.
    */
-  class AdditionalData : public Subscriptor
+  class AdditionalData : public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -283,7 +283,7 @@ template <typename MatrixType,
           typename InverseNumberType = typename MatrixType::value_type,
           typename VectorType        = Vector<double>>
 class RelaxationBlockJacobi
-  : public virtual Subscriptor,
+  : public virtual EnableRefCountingByObserverPointer,
     protected RelaxationBlock<MatrixType, InverseNumberType, VectorType>
 {
 public:
@@ -379,7 +379,7 @@ template <typename MatrixType,
           typename InverseNumberType = typename MatrixType::value_type,
           typename VectorType        = Vector<double>>
 class RelaxationBlockSOR
-  : public virtual Subscriptor,
+  : public virtual EnableRefCountingByObserverPointer,
     protected RelaxationBlock<MatrixType, InverseNumberType, VectorType>
 {
 public:
@@ -475,7 +475,7 @@ template <typename MatrixType,
           typename InverseNumberType = typename MatrixType::value_type,
           typename VectorType        = Vector<double>>
 class RelaxationBlockSSOR
-  : public virtual Subscriptor,
+  : public virtual EnableRefCountingByObserverPointer,
     protected RelaxationBlock<MatrixType, InverseNumberType, VectorType>
 {
 public:
index 78db56a7b45e7396218716d496ff9f036e60c0aa..6f064370254b2261f2417befde7ea31de55e9fe8 100644 (file)
@@ -338,7 +338,7 @@ class Vector;
  */
 template <typename VectorType = Vector<double>>
 DEAL_II_CXX20_REQUIRES(concepts::is_vector_space_vector<VectorType>)
-class SolverBase : public Subscriptor
+class SolverBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index b3ff66ed118385587e5cf00b8b81b61f52bcc4ea..847b7c7b40dcae120521f900faca258813581481 100644 (file)
@@ -63,7 +63,7 @@ class ParameterHandler;
  * number of iterations.
  * </ul>
  */
-class SolverControl : public Subscriptor
+class SolverControl : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 0615ab5cf00c3c04e58e6a36125c253703f8f7c1..4f939d6ec5a861dae785edad1824dc7035f665b4 100644 (file)
@@ -89,7 +89,7 @@ DEAL_II_NAMESPACE_OPEN
  */
 template <typename VectorType = Vector<double>>
 DEAL_II_CXX20_REQUIRES(concepts::is_vector_space_vector<VectorType>)
-class SolverSelector : public Subscriptor
+class SolverSelector : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index c86e28a687fa965fc9b361992a4a373802c4fa38..51ae84fa157533438e5f213618c6e6d833d0a7a6 100644 (file)
@@ -104,7 +104,7 @@ DEAL_II_NAMESPACE_OPEN
  */
 template <typename number>
 class SparseLUDecomposition : protected SparseMatrix<number>,
-                              public virtual Subscriptor
+                              public virtual EnableRefCountingByObserverPointer
 {
 protected:
   /**
index f1d3e8b74eba0e79e547a9e10d838e47fcabeabd..e962a21505eb175dfd33d0229ef458c084f7a597 100644 (file)
@@ -88,7 +88,7 @@ namespace types
  *
  * @ingroup Solvers Preconditioners
  */
-class SparseDirectUMFPACK : public Subscriptor
+class SparseDirectUMFPACK : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 1dd5f17671934df5cc1ca2348b65a5e77b88307b..73b65537d5d88f019283b2170d203ec2f3a692c6 100644 (file)
@@ -516,7 +516,7 @@ DEAL_II_NAMESPACE_OPEN
  * @ingroup Matrix1
  */
 template <typename number>
-class SparseMatrix : public virtual Subscriptor
+class SparseMatrix : public virtual EnableRefCountingByObserverPointer
 {
 public:
   /**
index 114569017a72899fbd8dd4743ccb163516ab2e70..d1467be7a810b3803a404d05ca5bab552a31cc6a 100644 (file)
@@ -55,7 +55,7 @@ SparseMatrix<number>::SparseMatrix()
 
 template <typename number>
 SparseMatrix<number>::SparseMatrix(const SparseMatrix &m)
-  : Subscriptor(m)
+  : EnableRefCountingByObserverPointer(m)
   , cols(nullptr, "SparseMatrix")
   , val(nullptr)
   , max_len(0)
@@ -72,7 +72,7 @@ SparseMatrix<number>::SparseMatrix(const SparseMatrix &m)
 
 template <typename number>
 SparseMatrix<number>::SparseMatrix(SparseMatrix<number> &&m) noexcept
-  : Subscriptor(std::move(m))
+  : EnableRefCountingByObserverPointer(std::move(m))
   , cols(std::move(m.cols))
   , val(std::move(m.val))
   , max_len(m.max_len)
index 971600b46298b8dec4955dada2c3fc9819fffd3f..b0a977f9232c8334f1ed1b5052e339d12e54d8f1 100644 (file)
@@ -100,7 +100,7 @@ class FullMatrix;
  *   where "EZ" is pronounced the same way as the word "easy".
  */
 template <typename number>
-class SparseMatrixEZ : public Subscriptor
+class SparseMatrixEZ : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 91bd0645efb1cccf89a7e1bb98ea93574b39701c..f63068d73ba7d4e5c65cb4407573a304a3b9a048 100644 (file)
@@ -40,7 +40,7 @@ SparseMatrixEZ<number>::SparseMatrixEZ()
 
 template <typename number>
 SparseMatrixEZ<number>::SparseMatrixEZ(const SparseMatrixEZ<number> &m)
-  : Subscriptor(m)
+  : EnableRefCountingByObserverPointer(m)
   , n_columns(0)
   , increment(m.increment)
   , saved_default_row_length(m.saved_default_row_length)
index 778647e13fd3da432e08bb653a31ae9f05375e5b..4f5d405e18996eee1c618dc54eab01d073b4e394 100644 (file)
@@ -1516,7 +1516,9 @@ inline void
 SparsityPattern::save(Archive &ar, const unsigned int) const
 {
   // forward to serialization function in the base class.
-  ar &boost::serialization::base_object<const Subscriptor>(*this);
+  ar &
+    boost::serialization::base_object<const EnableRefCountingByObserverPointer>(
+      *this);
 
   ar &max_dim &rows &cols &max_vec_len &max_row_length &compressed;
 
@@ -1539,7 +1541,8 @@ inline void
 SparsityPattern::load(Archive &ar, const unsigned int)
 {
   // forward to serialization function in the base class.
-  ar &boost::serialization::base_object<Subscriptor>(*this);
+  ar &boost::serialization::base_object<EnableRefCountingByObserverPointer>(
+    *this);
 
   ar &max_dim &rows &cols &max_vec_len &max_row_length &compressed;
 
index 778e32844e1fbaa4d289562e889aacb79638046d..28b8cf02df7ea4ab0aedc729e96579d691de6e48 100644 (file)
@@ -35,7 +35,7 @@ DEAL_II_NAMESPACE_OPEN
  * Base class for all sparsity patterns, defining a common interface by which
  * new values can be added.
  */
-class SparsityPatternBase : public Subscriptor
+class SparsityPatternBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 67ccd3162716c3b770fbdc343ead955afa279b4c..23a2e510e13f8f4f5d4e31e0003c91f9f82b60d2 100644 (file)
@@ -223,7 +223,7 @@ namespace LinearAlgebra
      * @ingroup Vectors
      */
     class Vector : public ReadVector<VectorTraits::value_type>,
-                   public Subscriptor
+                   public EnableRefCountingByObserverPointer
     {
     public:
       using value_type      = VectorTraits::value_type;
index b3f11382d1f5ab636d4eb8e5485161edbb721225..a262b35651f3085fe4e8174e8f21cd7e799a6c62 100644 (file)
@@ -73,7 +73,7 @@ namespace TrilinosWrappers
    * @ingroup TrilinosWrappers
    * @ingroup Preconditioners
    */
-  class PreconditionBase : public Subscriptor
+  class PreconditionBase : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 6e1dc27f11166da04eecf3b23c16c358f649692c..cc51c6826409abc9d7bc18e3c6c3116afad2f33a 100644 (file)
@@ -482,7 +482,7 @@ namespace TrilinosWrappers
    *
    * @ingroup TrilinosWrappers
    */
-  class SolverDirect : public Subscriptor
+  class SolverDirect : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 37db5dbc99623a0eed247ba1c19d826ac37b18d8..2b7454702efe4af1a89c1ef4887b2135ae1cdc9a 100644 (file)
@@ -546,7 +546,7 @@ namespace TrilinosWrappers
    * @ingroup TrilinosWrappers
    * @ingroup Matrix1
    */
-  class SparseMatrix : public Subscriptor
+  class SparseMatrix : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index dc3e8427d8bbc5fc3523ac0e967769bebb8d32d5..9e8544b942ef5a46e494639673140df35a5e8cbf 100644 (file)
@@ -53,7 +53,7 @@ namespace LinearAlgebra
      * @ingroup Preconditioners
      */
     template <typename Number, typename MemorySpace = dealii::MemorySpace::Host>
-    class PreconditionBase : public Subscriptor
+    class PreconditionBase : public EnableRefCountingByObserverPointer
     {
     public:
       /**
index 01e9567cf5dd848c4d93063afeff457ed561cc0b..d6f0c55dec61c686ff309dc054a2102f5a6a8682 100644 (file)
@@ -107,7 +107,7 @@ namespace LinearAlgebra
      * the matrix, you must call SparseMatrix::compress() again.
      */
     template <typename Number, typename MemorySpace = dealii::MemorySpace::Host>
-    class SparseMatrix : public Subscriptor
+    class SparseMatrix : public EnableRefCountingByObserverPointer
     {
     public:
       /**
index dc1f18ba2e77f85c80d98127c90e6771dc1892b3..8631a6f5339a0d389f4c40f04a677fab3bf46428 100644 (file)
@@ -285,7 +285,8 @@ namespace LinearAlgebra
      * @ingroup Vectors
      */
     template <typename Number, typename MemorySpace = dealii::MemorySpace::Host>
-    class Vector : public ReadVector<Number>, public Subscriptor
+    class Vector : public ReadVector<Number>,
+                   public EnableRefCountingByObserverPointer
     {
     public:
       /**
index acb36e1e973c085f9075f631c2a47709c5c8a4dd..6eec9b7dc574c7559567578ff224fe700329398d 100644 (file)
@@ -78,7 +78,7 @@ namespace LinearAlgebra
 
     template <typename Number, typename MemorySpace>
     Vector<Number, MemorySpace>::Vector()
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , compressed(true)
       , has_ghost(false)
       , vector(Utilities::Trilinos::internal::make_rcp<
@@ -91,7 +91,7 @@ namespace LinearAlgebra
 
     template <typename Number, typename MemorySpace>
     Vector<Number, MemorySpace>::Vector(const Vector<Number, MemorySpace> &V)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , compressed(V.compressed)
       , has_ghost(V.has_ghost)
       , vector(Utilities::Trilinos::internal::make_rcp<
@@ -109,7 +109,7 @@ namespace LinearAlgebra
     template <typename Number, typename MemorySpace>
     Vector<Number, MemorySpace>::Vector(
       const Teuchos::RCP<TpetraTypes::VectorType<Number, MemorySpace>> V)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , compressed(true)
       , has_ghost(V->getMap()->isOneToOne() == false)
       , vector(V)
@@ -120,7 +120,7 @@ namespace LinearAlgebra
     template <typename Number, typename MemorySpace>
     Vector<Number, MemorySpace>::Vector(const IndexSet &parallel_partitioner,
                                         const MPI_Comm  communicator)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , compressed(true)
       , has_ghost(false)
       , vector(Utilities::Trilinos::internal::make_rcp<
@@ -136,7 +136,7 @@ namespace LinearAlgebra
                                         const IndexSet &ghost_entries,
                                         const MPI_Comm  communicator,
                                         const bool      vector_writable)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
     {
       if (!vector_writable)
         {
index 9cc22e4249af8081c36dd89cf3f25efa395ff440..0f092a0ef319b53784329daa9ff901bb2ee780e3 100644 (file)
@@ -401,7 +401,8 @@ namespace TrilinosWrappers
      * @ingroup TrilinosWrappers
      * @ingroup Vectors
      */
-    class Vector : public Subscriptor, public ReadVector<TrilinosScalar>
+    class Vector : public EnableRefCountingByObserverPointer,
+                   public ReadVector<TrilinosScalar>
     {
     public:
       /**
index fbd184ab71c4732fd164b45488350f633122ec67..219dd685946f352237d1b0673deb4eb1147e7b0c 100644 (file)
@@ -116,7 +116,8 @@ namespace parallel
  * in the manual).
  */
 template <typename Number>
-class Vector : public Subscriptor, public ReadVector<Number>
+class Vector : public EnableRefCountingByObserverPointer,
+               public ReadVector<Number>
 {
 public:
   /**
@@ -1480,7 +1481,7 @@ inline void
 Vector<Number>::save(Archive &ar, const unsigned int) const
 {
   // forward to serialization function in the base class.
-  ar &static_cast<const Subscriptor &>(*this);
+  ar &static_cast<const EnableRefCountingByObserverPointer &>(*this);
   ar &values;
 }
 
@@ -1492,7 +1493,7 @@ inline void
 Vector<Number>::load(Archive &ar, const unsigned int)
 {
   // the load stuff again from the archive
-  ar &static_cast<Subscriptor &>(*this);
+  ar &static_cast<EnableRefCountingByObserverPointer &>(*this);
   ar &values;
   maybe_reset_thread_partitioner();
 }
index 481245c874f340dc255ec5f74c1dae2dc800c12a..a32065f2fd1d92685878a48f7fb6e472152f954f 100644 (file)
@@ -52,7 +52,7 @@ DEAL_II_NAMESPACE_OPEN
 
 template <typename Number>
 Vector<Number>::Vector(const Vector<Number> &v)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
 {
   *this = v;
 }
index 7e04f37cdf70db6f32a44322d0590baadeb08bbd..2545107c4c403e198701605da64acfd9626aa108 100644 (file)
@@ -101,7 +101,7 @@ DEAL_II_NAMESPACE_OPEN
  * <i>always</i> returned.
  */
 template <typename VectorType = dealii::Vector<double>>
-class VectorMemory : public Subscriptor
+class VectorMemory : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index c9ef3821cb1664082b4f4658b2ab9ca2f370ee79..f54d0891cf7d9e5d785544db88eccda3d10b2d94 100644 (file)
@@ -283,7 +283,7 @@ struct FERemoteCommunicationObjectTwoLevel
  * A class to fill the fields in PrecomputedEvaluationData.
  */
 template <int dim>
-class FERemoteEvaluationCommunicator : public Subscriptor
+class FERemoteEvaluationCommunicator : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 21248b12873f303225461ab6fa907f8fb06a292e..ca7c7286d6482d756a67322423231d8db1e25501 100644 (file)
@@ -109,7 +109,7 @@ DEAL_II_NAMESPACE_OPEN
 template <int dim,
           typename Number              = double,
           typename VectorizedArrayType = VectorizedArray<Number>>
-class MatrixFree : public Subscriptor
+class MatrixFree : public EnableRefCountingByObserverPointer
 {
   static_assert(
     std::is_same_v<Number, typename VectorizedArrayType::value_type>,
index 51cd4c0f04c8749c50628fe857669160554024b8..0a80f23e393705676626e4018585ef89093d02ab 100644 (file)
@@ -77,7 +77,7 @@ DEAL_II_NAMESPACE_OPEN
 
 template <int dim, typename Number, typename VectorizedArrayType>
 MatrixFree<dim, Number, VectorizedArrayType>::MatrixFree()
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , indices_are_initialized(false)
   , mapping_is_initialized(false)
   , mg_level(numbers::invalid_unsigned_int)
@@ -88,7 +88,7 @@ MatrixFree<dim, Number, VectorizedArrayType>::MatrixFree()
 template <int dim, typename Number, typename VectorizedArrayType>
 MatrixFree<dim, Number, VectorizedArrayType>::MatrixFree(
   const MatrixFree<dim, Number, VectorizedArrayType> &other)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
 {
   copy_from(other);
 }
index 8f367059937c5ce43fbcf7cf2e83a6732a990a8b..5991e00c44864277d294fa74ee3fc11746a85589 100644 (file)
@@ -184,7 +184,7 @@ namespace MatrixFreeOperators
             typename VectorType = LinearAlgebra::distributed::Vector<double>,
             typename VectorizedArrayType =
               VectorizedArray<typename VectorType::value_type>>
-  class Base : public Subscriptor
+  class Base : public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -534,7 +534,7 @@ namespace MatrixFreeOperators
    * prolongation phase.
    */
   template <typename OperatorType>
-  class MGInterfaceOperator : public Subscriptor
+  class MGInterfaceOperator : public EnableRefCountingByObserverPointer
   {
   public:
     /**
@@ -1215,7 +1215,7 @@ namespace MatrixFreeOperators
   //----------------- Base operator -----------------------------
   template <int dim, typename VectorType, typename VectorizedArrayType>
   Base<dim, VectorType, VectorizedArrayType>::Base()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
     , have_interface_matrices(false)
   {}
 
@@ -1805,7 +1805,7 @@ namespace MatrixFreeOperators
 
   template <typename OperatorType>
   MGInterfaceOperator<OperatorType>::MGInterfaceOperator()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
     , mf_base_operator(nullptr)
   {}
 
index e6f96b5d6b8f703ff93629e4f13482cb501dfe38..6a20de94f74c50b21de09aefd4738045833263e0 100644 (file)
@@ -86,7 +86,7 @@ namespace Portable
    * @note Only float and double are supported.
    */
   template <int dim, typename Number = double>
-  class MatrixFree : public Subscriptor
+  class MatrixFree : public EnableRefCountingByObserverPointer
   {
   public:
     using jacobian_type = Tensor<2, dim, Tensor<1, dim, Number>>;
index 51a665665a336d0c792653236897129b70fd5558..ed5fafe313838b698cd647dab1e66db40cc68883 100644 (file)
@@ -56,7 +56,8 @@ namespace MeshWorker
    * @ingroup MeshWorker
    */
   template <int dim, int spacedim = dim, typename number = double>
-  class DEAL_II_DEPRECATED LocalIntegrator : public Subscriptor
+  class DEAL_II_DEPRECATED LocalIntegrator
+    : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index f4d22af7a0c0c8c485a26989b9d36594833ede98..2f8dc0bc77fa09018c0ddf36f1e8be40cfb04fc2 100644 (file)
@@ -44,7 +44,7 @@ namespace MeshWorker
    *
    * @ingroup MeshWorker
    */
-  class VectorSelector : public Subscriptor
+  class VectorSelector : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 8a71fa177fbbf1e750d9d82e971518ac19db7ba9..d0b9c42989fd2d1ae3e2fedba3b481a1c0a2e11c 100644 (file)
@@ -44,7 +44,7 @@ DEAL_II_NAMESPACE_OPEN
  * of matrices, will be sufficient for applications.
  */
 template <typename VectorType>
-class MGMatrixBase : public Subscriptor
+class MGMatrixBase : public EnableRefCountingByObserverPointer
 {
 public:
   /*
@@ -104,7 +104,7 @@ public:
  * will be done by derived classes.
  */
 template <typename VectorType>
-class MGCoarseGridBase : public Subscriptor
+class MGCoarseGridBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -168,7 +168,7 @@ public:
  * needed.
  */
 template <typename VectorType>
-class MGTransferBase : public Subscriptor
+class MGTransferBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -248,7 +248,7 @@ public:
  * in the vector @p u given the right hand side, which is done by smooth().
  */
 template <typename VectorType>
-class MGSmootherBase : public Subscriptor
+class MGSmootherBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 24d0c69605d384404ac6124f158ea24bd940576a..9807712554912f9b52917d66b0854f579407ef79 100644 (file)
@@ -41,7 +41,7 @@ class DoFHandler;
  *
  * @ingroup mg
  */
-class MGConstrainedDoFs : public Subscriptor
+class MGConstrainedDoFs : public EnableRefCountingByObserverPointer
 {
 public:
   using size_dof = std::vector<std::set<types::global_dof_index>>::size_type;
index b12a18b58c43651debaa9145726e1ddb762f975f..a269e757b13dda832a6dc2d5cb789780ae7a7ec2 100644 (file)
@@ -216,7 +216,7 @@ namespace MGTransferGlobalCoarseningTools
  * accordingly.
  */
 template <typename VectorType>
-class MGTwoLevelTransferBase : public Subscriptor
+class MGTwoLevelTransferBase : public EnableRefCountingByObserverPointer
 {
 public:
   static_assert(
index 257462599504938faad72afeb2909d936958b4d3..89923df899834adb4e821ba2fc0f2096fec6fc87 100644 (file)
@@ -159,7 +159,7 @@ namespace mg
  * MGTransferBase.
  */
 template <typename VectorType>
-class Multigrid : public Subscriptor
+class Multigrid : public EnableRefCountingByObserverPointer
 {
 public:
   /**
@@ -499,7 +499,7 @@ private:
  * to be initialized with a separate DoFHandler for each block.
  */
 template <int dim, typename VectorType, typename TransferType>
-class PreconditionMG : public Subscriptor
+class PreconditionMG : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index f9028d5f1a792f995b81542e0b01fc5efffe897f..b7b2b0530d2bbbbc57efee4dcd36f4d061349d07 100644 (file)
@@ -38,7 +38,7 @@ namespace mg
    * multigrid with local refinement.
    */
   template <typename number>
-  class SparseMatrixCollection : public Subscriptor
+  class SparseMatrixCollection : public EnableRefCountingByObserverPointer
   {
   public:
     void
index 24881677885f021b03d10dd977251c96f544617a..cf2e21dbe5bd6b4814737ef5782844508577df7b 100644 (file)
@@ -218,7 +218,7 @@ namespace NonMatching
    * held.
    */
   template <int dim, int spacedim = dim, typename Number = double>
-  class MappingInfo : public Subscriptor
+  class MappingInfo : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index aa631b135b58dc83339b046cfbeb7a331c72a7ee..b5f5e19aae2cf7c02eb24e91fb55bdf3d6b26ea5 100644 (file)
@@ -105,7 +105,7 @@ namespace NonMatching
    * same way as for the discrete level set function.
    */
   template <int dim>
-  class MeshClassifier : public Subscriptor
+  class MeshClassifier : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index 6c091ebad4089ec17f1a6a0c6fb90ed15e1b9583..2b1d4ce0277e1955786defb08015b142906c047e 100644 (file)
@@ -579,7 +579,7 @@ namespace DataPostprocessorInputs
  * @ingroup output
  */
 template <int dim>
-class DataPostprocessor : public Subscriptor
+class DataPostprocessor : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 3be402ca366c4d23a3daeb83a19e2a01ddc237d6..04fadcef154beb555465017c506a672df547aac5 100644 (file)
@@ -660,7 +660,7 @@ private:
  * following grids, and some functions to be called before a new loop over all
  * time steps is started.
  */
-class TimeStepBase : public Subscriptor
+class TimeStepBase : public EnableRefCountingByObserverPointer
 {
 public:
   /**
index 6fa00f8e6d47fcf3621aaa608c42e47bb16c3f51..96aa1bd648031ae25c9d72d6eca2bb37350e0119 100644 (file)
@@ -59,7 +59,7 @@ namespace Particles
    * finite-element solution see step-19, step-68, step-70, and step-83.
    */
   template <int dim, int spacedim = dim>
-  class ParticleHandler : public Subscriptor
+  class ParticleHandler : public EnableRefCountingByObserverPointer
   {
   public:
     /**
index d39f88611e7a3804b8694cc15659d98dda6d40c3..89de89c1d09bc300f3f85dda4eaecb3a2cc64bdc 100644 (file)
@@ -244,7 +244,7 @@ Quadrature<1>::Quadrature(const SubQuadrature &, const Quadrature<1> &q2)
 
 template <>
 Quadrature<0>::Quadrature(const Quadrature<1> &)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , quadrature_points(1)
   , weights(1, 1.)
   , is_tensor_product_flag(false)
@@ -253,7 +253,7 @@ Quadrature<0>::Quadrature(const Quadrature<1> &)
 
 template <>
 Quadrature<1>::Quadrature(const Quadrature<0> &)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
 {
   // this function should never be called -- this should be the copy constructor
   // in 1d...
@@ -265,7 +265,7 @@ Quadrature<1>::Quadrature(const Quadrature<0> &)
 
 template <int dim>
 Quadrature<dim>::Quadrature(const Quadrature<dim != 1 ? 1 : 0> &q)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , quadrature_points(Utilities::fixed_power<dim>(q.size()))
   , weights(Utilities::fixed_power<dim>(q.size()))
   , is_tensor_product_flag(true)
@@ -303,7 +303,7 @@ Quadrature<dim>::Quadrature(const Quadrature<dim != 1 ? 1 : 0> &q)
 
 template <int dim>
 Quadrature<dim>::Quadrature(const Quadrature<dim> &q)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , quadrature_points(q.quadrature_points)
   , weights(q.weights)
   , is_tensor_product_flag(q.is_tensor_product_flag)
index ece630d2eb36e7d2f6b9ecb73755e8128745f5aa..18a03f9875a21a2c3a94a5082affa69773b324d0 100644 (file)
@@ -26,10 +26,11 @@ DEAL_II_NAMESPACE_OPEN
 static const char *unknown_subscriber = "unknown subscriber";
 
 
-std::mutex Subscriptor::mutex;
+std::mutex EnableRefCountingByObserverPointer::mutex;
 
 
-Subscriptor::Subscriptor(Subscriptor &&subscriptor) noexcept
+EnableRefCountingByObserverPointer::EnableRefCountingByObserverPointer(
+  EnableRefCountingByObserverPointer &&subscriptor) noexcept
   : counter(0)
   , object_info(subscriptor.object_info)
 {
@@ -40,7 +41,7 @@ Subscriptor::Subscriptor(Subscriptor &&subscriptor) noexcept
 
 
 
-Subscriptor::~Subscriptor()
+EnableRefCountingByObserverPointer::~EnableRefCountingByObserverPointer()
 {
   for (auto *const validity_ptr : validity_pointers)
     *validity_ptr = false;
@@ -49,7 +50,7 @@ Subscriptor::~Subscriptor()
 
 
 void
-Subscriptor::check_no_subscribers() const noexcept
+EnableRefCountingByObserverPointer::check_no_subscribers() const noexcept
 {
   // Check whether there are still subscriptions to this object. If so, output
   // the actual name of the class to which this object belongs, i.e. the most
@@ -114,8 +115,9 @@ Subscriptor::check_no_subscribers() const noexcept
 
 
 
-Subscriptor &
-Subscriptor::operator=(Subscriptor &&s) noexcept
+EnableRefCountingByObserverPointer &
+EnableRefCountingByObserverPointer::operator=(
+  EnableRefCountingByObserverPointer &&s) noexcept
 {
   for (auto *const validity_ptr : s.validity_pointers)
     *validity_ptr = false;
@@ -127,8 +129,8 @@ Subscriptor::operator=(Subscriptor &&s) noexcept
 
 
 void
-Subscriptor::subscribe(std::atomic<bool> *const validity,
-                       const std::string       &id) const
+EnableRefCountingByObserverPointer::subscribe(std::atomic<bool> *const validity,
+                                              const std::string       &id) const
 {
   std::lock_guard<std::mutex> lock(mutex);
 
@@ -147,8 +149,9 @@ Subscriptor::subscribe(std::atomic<bool> *const validity,
 
 
 void
-Subscriptor::unsubscribe(std::atomic<bool> *const validity,
-                         const std::string       &id) const
+EnableRefCountingByObserverPointer::unsubscribe(
+  std::atomic<bool> *const validity,
+  const std::string       &id) const
 {
   const std::string &name = id.empty() ? unknown_subscriber : id;
 
@@ -183,7 +186,7 @@ Subscriptor::unsubscribe(std::atomic<bool> *const validity,
       AssertNothrow(
         validity_ptr_it != validity_pointers.end(),
         ExcMessage(
-          "This Subscriptor object does not know anything about the supplied pointer!"));
+          "This EnableRefCountingByObserverPointer object does not know anything about the supplied pointer!"));
       return;
     }
 
@@ -195,7 +198,7 @@ Subscriptor::unsubscribe(std::atomic<bool> *const validity,
 
 
 void
-Subscriptor::list_subscribers() const
+EnableRefCountingByObserverPointer::list_subscribers() const
 {
   list_subscribers(deallog);
 }
index a496a30a662dff4c58395459b4eaa6b4afe4f6d3..573e1e63f65b03fddcefb34e5cd7dca9ab129dce 100644 (file)
@@ -12022,7 +12022,7 @@ template <int dim, int spacedim>
 DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
 Triangulation<dim, spacedim>::Triangulation(
   Triangulation<dim, spacedim> &&tria) noexcept
-  : Subscriptor(std::move(tria))
+  : EnableRefCountingByObserverPointer(std::move(tria))
   , smooth_grid(tria.smooth_grid)
   , reference_cells(std::move(tria.reference_cells))
   , periodic_face_pairs_level_0(std::move(tria.periodic_face_pairs_level_0))
@@ -12050,7 +12050,7 @@ DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
 Triangulation<dim, spacedim> &Triangulation<dim, spacedim>::operator=(
   Triangulation<dim, spacedim> &&tria) noexcept
 {
-  Subscriptor::operator=(std::move(tria));
+  EnableRefCountingByObserverPointer::operator=(std::move(tria));
 
   smooth_grid                  = tria.smooth_grid;
   reference_cells              = std::move(tria.reference_cells);
index e7acf15fb6fcc3ed0c567fc56506a26fbb88c76b..23e985cb0b18d00de15fe947159659c55becca32 100644 (file)
@@ -134,7 +134,7 @@ namespace hp
   template <int dim, int q_dim, typename FEValuesType>
   FEValuesBase<dim, q_dim, FEValuesType>::FEValuesBase(
     const FEValuesBase<dim, q_dim, FEValuesType> &other)
-    : Subscriptor(other)
+    : EnableRefCountingByObserverPointer(other)
     , fe_collection(other.fe_collection)
     , mapping_collection(other.mapping_collection)
     , q_collection(other.q_collection)
index 27d8fe6d456aab2a77aa5201b1f328fe4efdbbda..a719355da5ed842f60f78f8da73bc9b43ade2ef1 100644 (file)
@@ -29,7 +29,7 @@ ChunkSparsityPattern::ChunkSparsityPattern()
 
 
 ChunkSparsityPattern::ChunkSparsityPattern(const ChunkSparsityPattern &s)
-  : Subscriptor()
+  : EnableRefCountingByObserverPointer()
   , chunk_size(s.chunk_size)
   , sparsity_pattern(s.sparsity_pattern)
 {
index 69a999e49dca3c42e7f5bcd16f23fb38071f2754..dfa3626af7d5af8c27b98e41d520f25ed5143501 100644 (file)
@@ -128,7 +128,7 @@ namespace PETScWrappers
 
 
   VectorBase::VectorBase(const VectorBase &v)
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
     , ghosted(v.ghosted)
     , ghost_indices(v.ghost_indices)
     , last_action(VectorOperation::unknown)
@@ -143,7 +143,7 @@ namespace PETScWrappers
 
 
   VectorBase::VectorBase(const Vec &v)
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
     , vector(v)
     , ghosted(false)
     , last_action(VectorOperation::unknown)
index 8920dd261298d8e52f836077ee2c3fa7eff49aba..0ddaa7e7eb678ae3ceaa0ce75804265b03c61d21 100644 (file)
@@ -81,7 +81,7 @@ namespace LinearAlgebra
 #  endif
 
     Vector::Vector()
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , vector(new Epetra_FEVector(
           Epetra_Map(0, 0, 0, Utilities::Trilinos::comm_self())))
     {}
@@ -89,7 +89,7 @@ namespace LinearAlgebra
 
 
     Vector::Vector(const Vector &V)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , vector(new Epetra_FEVector(V.trilinos_vector()))
     {}
 
@@ -97,7 +97,7 @@ namespace LinearAlgebra
 
     Vector::Vector(const IndexSet &parallel_partitioner,
                    const MPI_Comm  communicator)
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , vector(new Epetra_FEVector(
           parallel_partitioner.make_trilinos_map(communicator, false)))
     {}
index 9ed58caaa0e03df6811003028a8bdcc3b3873d55..6af1b3e8e307f9d9a9aa23e58c15414aee2fbc2f 100644 (file)
@@ -77,7 +77,7 @@ namespace TrilinosWrappers
   namespace MPI
   {
     Vector::Vector()
-      : Subscriptor()
+      : EnableRefCountingByObserverPointer()
       , last_action(Zero)
       , compressed(true)
       , has_ghosts(false)
@@ -110,7 +110,8 @@ namespace TrilinosWrappers
       : Vector()
     {
       // initialize a minimal, valid object and swap
-      static_cast<Subscriptor &>(*this) = static_cast<Subscriptor &&>(v);
+      static_cast<EnableRefCountingByObserverPointer &>(*this) =
+        static_cast<EnableRefCountingByObserverPointer &&>(v);
       swap(v);
     }
 
@@ -522,7 +523,8 @@ namespace TrilinosWrappers
     Vector &
     Vector::operator=(Vector &&v) noexcept
     {
-      static_cast<Subscriptor &>(*this) = static_cast<Subscriptor &&>(v);
+      static_cast<EnableRefCountingByObserverPointer &>(*this) =
+        static_cast<EnableRefCountingByObserverPointer &&>(v);
       swap(v);
       return *this;
     }
index f7a1d452b17580873a8e59bb21dff5b8d5a7ce42..f8adea55fcaf150fc4d6498971cab585ef649751 100644 (file)
@@ -24,7 +24,7 @@
 // test computing square root of 2 with newton's method
 
 
-class SquareRoot : public Subscriptor
+class SquareRoot : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 2958949b78ddb9c3663c6746c1bd37457d481c12..2643a4d08954bcb41f1235d382b2f522a2b12d5c 100644 (file)
@@ -14,8 +14,8 @@
 
 
 
-// Check the behavior of the ObserverPointer-Subscriptor pair
-// for copy and move semantics.
+// Check the behavior of the ObserverPointer-EnableRefCountingByObserverPointer
+// pair for copy and move semantics.
 
 
 #include <deal.II/base/observer_pointer.h>
@@ -26,7 +26,7 @@
 
 #include "../tests.h"
 
-class Test : public Subscriptor
+class Test : public EnableRefCountingByObserverPointer
 {};
 
 int
@@ -39,10 +39,12 @@ main()
   {
     deallog << "Checking copy assignment" << std::endl;
 
-    Subscriptor                  subscriptor_1;
-    Subscriptor                  subscriptor_2;
-    ObserverPointer<Subscriptor> smart_pointer_1(&subscriptor_1);
-    ObserverPointer<Subscriptor> smart_pointer_2(&subscriptor_2);
+    EnableRefCountingByObserverPointer                  subscriptor_1;
+    EnableRefCountingByObserverPointer                  subscriptor_2;
+    ObserverPointer<EnableRefCountingByObserverPointer> smart_pointer_1(
+      &subscriptor_1);
+    ObserverPointer<EnableRefCountingByObserverPointer> smart_pointer_2(
+      &subscriptor_2);
 
     subscriptor_2 = subscriptor_1;
 
@@ -73,10 +75,11 @@ main()
   {
     deallog << "Checking copy construction" << std::endl;
 
-    Subscriptor                  subscriptor_1;
-    ObserverPointer<Subscriptor> smart_pointer_1(&subscriptor_1);
+    EnableRefCountingByObserverPointer                  subscriptor_1;
+    ObserverPointer<EnableRefCountingByObserverPointer> smart_pointer_1(
+      &subscriptor_1);
 
-    Subscriptor subscriptor_2(subscriptor_1);
+    EnableRefCountingByObserverPointer subscriptor_2(subscriptor_1);
 
     deallog << "Checking smart_pointer_1" << std::endl;
     try
@@ -94,10 +97,12 @@ main()
   {
     deallog << "Checking move assignment" << std::endl;
 
-    Subscriptor                  subscriptor_1;
-    Subscriptor                  subscriptor_2;
-    ObserverPointer<Subscriptor> smart_pointer_1(&subscriptor_1);
-    ObserverPointer<Subscriptor> smart_pointer_2(&subscriptor_2);
+    EnableRefCountingByObserverPointer                  subscriptor_1;
+    EnableRefCountingByObserverPointer                  subscriptor_2;
+    ObserverPointer<EnableRefCountingByObserverPointer> smart_pointer_1(
+      &subscriptor_1);
+    ObserverPointer<EnableRefCountingByObserverPointer> smart_pointer_2(
+      &subscriptor_2);
 
     subscriptor_2 = std::move(subscriptor_1);
 
@@ -128,10 +133,11 @@ main()
   {
     deallog << "Checking move construction" << std::endl;
 
-    Subscriptor                  subscriptor_1;
-    ObserverPointer<Subscriptor> smart_pointer_1(&subscriptor_1);
+    EnableRefCountingByObserverPointer                  subscriptor_1;
+    ObserverPointer<EnableRefCountingByObserverPointer> smart_pointer_1(
+      &subscriptor_1);
 
-    Subscriptor subscriptor_2(std::move(subscriptor_1));
+    EnableRefCountingByObserverPointer subscriptor_2(std::move(subscriptor_1));
 
     deallog << "Checking smart_pointer_1" << std::endl;
     try
index c597c859fe2cb955eb908a599b256a23385add39..7b6644354d42e93f62b89298020e178fafb77934 100644 (file)
@@ -32,7 +32,7 @@
 std::vector<char> memory(10000);
 int               next = 0;
 
-class Test : public Subscriptor
+class Test : public EnableRefCountingByObserverPointer
 {
   const char *name;
 
index e67a1b8eece5534ab2363478a86a90458ace44dd..0a368162b338641487a57d9393f3b5fe84526ad8 100644 (file)
@@ -27,7 +27,7 @@
 #include "../tests.h"
 
 
-class Test : public Subscriptor
+class Test : public EnableRefCountingByObserverPointer
 {};
 
 
index da5af3a9112ab55fa2056915dbf1579cd0b8ee7b..b67da69023138eb03c567c1fb9f80437523f07e3 100644 (file)
@@ -28,7 +28,7 @@
 #include "../tests.h"
 
 
-class Test : public Subscriptor
+class Test : public EnableRefCountingByObserverPointer
 {};
 
 
index f16a916f9020eb2021f24df547f380f659a23f87..98dfd6604674cd58e2a04d30419c8b70e3326923 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "../tests.h"
 
-class Test : public Subscriptor
+class Test : public EnableRefCountingByObserverPointer
 {};
 
 int
@@ -35,10 +35,10 @@ main()
 
   initlog();
 
-  Subscriptor       subscriptor;
-  std::atomic<bool> dummy_a;
-  const char       *foo_a = "a";
-  const char       *foo_b = "b";
+  EnableRefCountingByObserverPointer subscriptor;
+  std::atomic<bool>                  dummy_a;
+  const char                        *foo_a = "a";
+  const char                        *foo_b = "b";
   subscriptor.subscribe(&dummy_a, foo_a);
   subscriptor.unsubscribe(&dummy_a, foo_b);
   std::atomic<bool> dummy_b;
index 8839743656ea13d29bb36eb15d214058bf7b48fc..a8ffe034de49f1bcfea42a7ca2ef0be8d4235588 100644 (file)
@@ -3,23 +3,23 @@ DEAL::Exception: ExcNoSubscriber(object_info->name(), name)
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool>*, const string&) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool>*, const string&) const
 The violated condition was: 
     it != counter_map.end()
 Additional information: 
     No subscriber with identifier <b> subscribes to this object of class
-    N6dealii11SubscriptorE. Consequently, it cannot be unsubscribed.
+    N6dealii34EnableRefCountingByObserverPointerE. Consequently, it cannot be unsubscribed.
 --------------------------------------------------------
 
-DEAL::Exception: ExcMessage( "This Subscriptor object does not know anything about the supplied pointer!")
+DEAL::Exception: ExcMessage( "This EnableRefCountingByObserverPointer object does not know anything about the supplied pointer!")
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool>*, const string&) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool>*, const string&) const
 The violated condition was: 
     validity_ptr_it != validity_pointers.end()
 Additional information: 
-    This Subscriptor object does not know anything about the supplied
+    This EnableRefCountingByObserverPointer object does not know anything about the supplied
     pointer!
 --------------------------------------------------------
 
index 7e8a4dde93c87c466515c3f11f15c7dea1fd9136..8356e57068e9df5768b4a22d7f465a78f944aff3 100644 (file)
@@ -3,23 +3,23 @@ DEAL::Exception: ExcNoSubscriber(object_info->name(), name)
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool> *const, const std::string &) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool> *const, const std::string &) const
 The violated condition was: 
     it != counter_map.end()
 Additional information: 
     No subscriber with identifier <b> subscribes to this object of class
-    N6dealii11SubscriptorE. Consequently, it cannot be unsubscribed.
+    N6dealii34EnableRefCountingByObserverPointerE. Consequently, it cannot be unsubscribed.
 --------------------------------------------------------
 
-DEAL::Exception: ExcMessage( "This Subscriptor object does not know anything about the supplied pointer!")
+DEAL::Exception: ExcMessage( "This EnableRefCountingByObserverPointer object does not know anything about the supplied pointer!")
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool> *const, const std::string &) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool> *const, const std::string &) const
 The violated condition was: 
     validity_ptr_it != validity_pointers.end()
 Additional information: 
-    This Subscriptor object does not know anything about the supplied
+    This EnableRefCountingByObserverPointer object does not know anything about the supplied
     pointer!
 --------------------------------------------------------
 
index 6d0a0fa0fe9e81b1bf96743a08a21ec7da978a1e..7442e1e7eb86420a2477263f4100ed092bd0e901 100644 (file)
@@ -3,23 +3,23 @@ DEAL::Exception: ExcNoSubscriber(object_info->name(), name)
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool>*, const std::string&) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool>*, const std::string&) const
 The violated condition was: 
     it != counter_map.end()
 Additional information: 
     No subscriber with identifier <b> subscribes to this object of class
-    N6dealii11SubscriptorE. Consequently, it cannot be unsubscribed.
+    N6dealii34EnableRefCountingByObserverPointerE. Consequently, it cannot be unsubscribed.
 --------------------------------------------------------
 
-DEAL::Exception: ExcMessage( "This Subscriptor object does not know anything about the supplied pointer!")
+DEAL::Exception: ExcMessage( "This EnableRefCountingByObserverPointer object does not know anything about the supplied pointer!")
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool>*, const std::string&) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool>*, const std::string&) const
 The violated condition was: 
     validity_ptr_it != validity_pointers.end()
 Additional information: 
-    This Subscriptor object does not know anything about the supplied
+    This EnableRefCountingByObserverPointer object does not know anything about the supplied
     pointer!
 --------------------------------------------------------
 
index cdd231ec98f15999c21419603c3ffccd8153f5f1..4e36b2b91117895a6e8fa5f4d4d5923e05988690 100644 (file)
@@ -3,23 +3,23 @@ DEAL::Exception: ExcNoSubscriber(object_info->name(), name)
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool> *, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> &) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool> *, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> &) const
 The violated condition was: 
     it != counter_map.end()
 Additional information: 
     No subscriber with identifier <b> subscribes to this object of class
-    N6dealii11SubscriptorE. Consequently, it cannot be unsubscribed.
+    N6dealii34EnableRefCountingByObserverPointerE. Consequently, it cannot be unsubscribed.
 --------------------------------------------------------
 
-DEAL::Exception: ExcMessage( "This Subscriptor object does not know anything about the supplied pointer!")
+DEAL::Exception: ExcMessage( "This EnableRefCountingByObserverPointer object does not know anything about the supplied pointer!")
 DEAL::
 --------------------------------------------------------
 An error occurred in file <subscriptor.cc> in function
-    void dealii::Subscriptor::unsubscribe(std::atomic<bool> *, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> &) const
+    void dealii::EnableRefCountingByObserverPointer::unsubscribe(std::atomic<bool> *, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> &) const
 The violated condition was: 
     validity_ptr_it != validity_pointers.end()
 Additional information: 
-    This Subscriptor object does not know anything about the supplied
+    This EnableRefCountingByObserverPointer object does not know anything about the supplied
     pointer!
 --------------------------------------------------------
 
index a6754ff10642e1fddb02935cc188fb42515a33e0..2eb1eab55e37c7a0fcfe27bb3164bcd56081dd3e 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "../tests.h"
 
-class Test : public Subscriptor
+class Test : public EnableRefCountingByObserverPointer
 {};
 
 int
@@ -37,10 +37,10 @@ main()
 
   initlog();
 
-  Subscriptor       subscriptor;
-  std::atomic<bool> dummy_a;
-  const char       *foo        = "a";
-  const std::string foo_string = "a";
+  EnableRefCountingByObserverPointer subscriptor;
+  std::atomic<bool>                  dummy_a;
+  const char                        *foo        = "a";
+  const std::string                  foo_string = "a";
   subscriptor.subscribe(&dummy_a, foo);
   subscriptor.unsubscribe(&dummy_a, foo_string.c_str());
 
index bf9bab069a446b424f88b604f8e0039a501f4415..30e3c994e01bb03ce35592d7122b312c0251527b 100644 (file)
@@ -288,7 +288,7 @@ LaplaceProblem<dim>::LaplaceProblem()
 // finite element object which counts
 // how many objects use that finite
 // element (this is what the
-// <code>Subscriptor</code>/<code>ObserverPointer</code>
+// <code>EnableRefCountingByObserverPointer</code>/<code>ObserverPointer</code>
 // class pair is used for, in case
 // you want something like this for
 // your own programs; see step-7 for
index a3f77f1976babf27616bcf54a055ad8f5c0def36..d594c9f11ca3f6094b8b13ddc8e6f1a6d74206d3 100644 (file)
@@ -15,8 +15,8 @@
 
 // this file didn't compile at one point in time due to the private
 // inheritance of SparseMatrix by SparseLUDecomposition, and the
-// associated lack of accessibility of the Subscriptor functions to
-// the ObserverPointer
+// associated lack of accessibility of the EnableRefCountingByObserverPointer
+// functions to the ObserverPointer
 //
 // it was fixed around 2003-05-22
 
index 7f744fa6382867e2693d1ade8ac3f613d40ef188..7c866ce7c799a773502a83d73102c352a7ab4fb3 100644 (file)
@@ -866,7 +866,7 @@ namespace LaplaceSolver
 namespace Data
 {
   template <int dim>
-  struct SetUpBase : public Subscriptor
+  struct SetUpBase : public EnableRefCountingByObserverPointer
   {
     virtual const Function<dim> &
     get_boundary_values() const = 0;
@@ -1095,7 +1095,7 @@ namespace Data
 namespace DualFunctional
 {
   template <int dim>
-  class DualFunctionalBase : public Subscriptor
+  class DualFunctionalBase : public EnableRefCountingByObserverPointer
   {
   public:
     virtual void
index 634fc10468d971696dd3561381afdea78f76ebcc..41df113156dbb2fc961d02833704a12dc54657e8 100644 (file)
@@ -312,7 +312,7 @@ namespace Step22
 
 
   template <class Matrix, class Preconditioner>
-  class InverseMatrix : public Subscriptor
+  class InverseMatrix : public EnableRefCountingByObserverPointer
   {
   public:
     InverseMatrix(const Matrix &m, const Preconditioner &preconditioner);
@@ -353,7 +353,7 @@ namespace Step22
   }
 
   template <class Preconditioner>
-  class SchurComplement : public Subscriptor
+  class SchurComplement : public EnableRefCountingByObserverPointer
   {
   public:
     SchurComplement(
index 0723522c728e82a95dac0cb7ef5c0855c2af87ae..87c48d9d7a700a60ac55f0f160b3a53c7d2d24d8 100644 (file)
@@ -52,7 +52,7 @@
 namespace Step
 {
   template <int dim>
-  class Problem : public Subscriptor
+  class Problem : public EnableRefCountingByObserverPointer
   {
   public:
     Problem();
index 9d488dc67232789f416a39063d688cc7afc5a621..88c12f552ceedd92392f24136ea2fbd5ed16593c 100644 (file)
@@ -45,7 +45,7 @@
 const unsigned int n_functionals = 3;
 
 template <int dim>
-class Local : public Subscriptor
+class Local : public EnableRefCountingByObserverPointer
 {
 public:
   using CellInfo = EmptyInfo;
index e1481c077d0f3507b11d1dc6df493cfe4d18063b..e2eee30ffa014564d2bdc247b242e151a174ffe2 100644 (file)
@@ -43,7 +43,7 @@
 const unsigned int n_functionals = 3;
 
 template <int dim>
-class Local : public Subscriptor
+class Local : public EnableRefCountingByObserverPointer
 {
 public:
   using CellInfo = EmptyInfo;
index 81c9f28410dd4c595cc567926a45a64a6126c7c8..5324199520f1fbea67cfb7ff14fe68ba0cc3419c 100644 (file)
@@ -39,7 +39,7 @@
 // Define a class that fills all available entries in the info objects
 // with recognizable numbers.
 template <int dim>
-class Local : public Subscriptor
+class Local : public EnableRefCountingByObserverPointer
 {
 public:
   using CellInfo = MeshWorker::IntegrationInfo<dim>;
index c10d8b8382c42fd15e8a72e337f43afb61718234..7214cadd134f2c1199f45449605175bcb7aa1eb5 100644 (file)
@@ -38,7 +38,7 @@
 
 // Use local matrices for Laplacian / interior penalty DG
 template <int dim>
-class MatrixIntegrator : public Subscriptor
+class MatrixIntegrator : public EnableRefCountingByObserverPointer
 {
 public:
   static void
index f13a69ba040cba8c5cdc70e0e13f67d60cfd6f40..f553806aa6e6cf1f184ab2e56a05f0f529e51f02 100644 (file)
@@ -39,7 +39,7 @@
 
 // Local integrators fill every matrix entry with 10*block_row + block_col
 template <int dim>
-class MatrixIntegrator : public Subscriptor
+class MatrixIntegrator : public EnableRefCountingByObserverPointer
 {
 public:
   static void
index 84aa029c636637d7340d2481a83874519f0af236..df017379c7268a863de11f51c8273d50459bdacd 100644 (file)
@@ -40,7 +40,7 @@
 // Define a class that fills all available entries in the info objects
 // with recognizable numbers.
 template <int dim>
-class Local : public Subscriptor
+class Local : public EnableRefCountingByObserverPointer
 {
 public:
   using CellInfo = MeshWorker::IntegrationInfo<dim>;
index 05bfbd55d86654f68d99a4f42d66d4818408fa49..810e696a6433815999a9355763c70b66e5361ccc 100644 (file)
@@ -98,7 +98,7 @@ private:
 };
 
 template <typename SparseMatrixType>
-class MySparseMatrix : public Subscriptor
+class MySparseMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   MySparseMatrix(const SparseMatrixType &sparse_matrix)
index 95128108d189b738424c5ea49aa4368ca1cf9f48..21756826ceb12cad19810e6e8b26f9d274f6e24a 100644 (file)
@@ -97,7 +97,7 @@ private:
 };
 
 template <typename SparseMatrixType>
-class MySparseMatrix : public Subscriptor
+class MySparseMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   MySparseMatrix(const SparseMatrixType &sparse_matrix)
index 53e1b6996bd84692795256643a02c8911844a043..5530835e22ac4057215af4a4e0a94d1d55535814 100644 (file)
@@ -47,7 +47,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index bfce10da136e6c215645e94159fd4752ce0eed4b..ec5a4e47c84e634006eb8e957d3624b339a60e1d 100644 (file)
@@ -55,7 +55,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 1db985938acdf253266a9d8a21a9de481a317a1d..85f620f1858bfca1e3305b421b0343b47a498392 100644 (file)
@@ -54,7 +54,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 65f89a1a8b526050eac04b1bc342419161b5f8f7..3110fa5e495425f441826beb74f196fec4025c6a 100644 (file)
@@ -55,7 +55,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index bca5ab6276d7f81eddcb7f87cfe685ef6884140f..a2546e81fb0875c0143afe0ca04a4bc6d8c157eb 100644 (file)
@@ -54,7 +54,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   LaplaceOperator(){};
index 3f2385974e2ff19a178731f2e2420dc9196a5159..b84ac1c6699a000ed97563dc08907dea96b1622f 100644 (file)
@@ -54,7 +54,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   LaplaceOperator(){};
@@ -400,7 +400,7 @@ private:
 
 
 template <typename LAPLACEOPERATOR>
-class MGInterfaceMatrix : public Subscriptor
+class MGInterfaceMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 133f3d61f44a030ad4820ea569a940da85705c81..00d2574038741f47430e1de24e9c514b8263dad0 100644 (file)
@@ -54,7 +54,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
@@ -407,7 +407,7 @@ private:
 
 
 template <typename LAPLACEOPERATOR>
-class MGInterfaceMatrix : public Subscriptor
+class MGInterfaceMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   void
index d0690705420d9202857568a04f0726a77d31667e..ecfec53f0a4dce62d3cadcb2b21a65541fec5e1a 100644 (file)
@@ -51,7 +51,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
@@ -404,7 +404,7 @@ private:
 
 
 template <typename LAPLACEOPERATOR>
-class MGInterfaceMatrix : public Subscriptor
+class MGInterfaceMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 916634bb3ca895ae7efd4c4e323ab3340523ba92..6d3dd57fbd156c3f09685fbd10a7fddb877281d2 100644 (file)
@@ -75,14 +75,14 @@ template <int dim,
           int n_q_points_1d = fe_degree + 1,
           typename BlockVectorType =
             LinearAlgebra::distributed::BlockVector<double>>
-class BlockLaplace : public Subscriptor
+class BlockLaplace : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = typename BlockVectorType::value_type;
   using size_type  = typename BlockVectorType::size_type;
 
   BlockLaplace()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
   {}
 
   void
index 269e08932d630756bc11e05f1647df47d88bee0d..55f9e7c313f2d6453a418c6a3d3d05f4ba2b001b 100644 (file)
@@ -68,14 +68,14 @@ template <int dim,
           int n_q_points_1d,
           typename BlockVectorType =
             LinearAlgebra::distributed::BlockVector<double>>
-class BlockLaplace : public Subscriptor
+class BlockLaplace : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = typename BlockVectorType::value_type;
   using size_type  = typename BlockVectorType::size_type;
 
   BlockLaplace()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
   {}
 
   void
index b01e86552c905136d604cbd0d3ac2fa5438c3501..38d6eb06ac0b2887c22980fec237b9d6b550f1c6 100644 (file)
@@ -57,7 +57,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 71e497604bdc0d3af7003748da0e9d90f95fd4ca..7381351c80620b83dd945ba2d4d1ddd49b708f21 100644 (file)
@@ -50,7 +50,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 2fd92164a3913179df152558d3e240a97c3c2a7d..628ecc31c6290cb9c67905b1e840917c73897608 100644 (file)
@@ -51,7 +51,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 1354945a2399ba4fe9abaced584b6d07efc9690f..5c684dab5883a0bfb497986e8948d85c2f23ed45 100644 (file)
@@ -52,7 +52,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index c26f3101e6233b4cd51ecc29451203e08d1b2aa4..58d8a87b52e68604274e6b79d0ddc5c6eeb050a8 100644 (file)
@@ -49,7 +49,7 @@
 
 
 template <int dim, typename number = double>
-class HelmholtzOperator : public Subscriptor
+class HelmholtzOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 21a070d87d1c12226efdbe6d636fb909e6e4a2ce..c38b44fa6a86ce43661092614acbc58adbf9db5b 100644 (file)
@@ -118,7 +118,7 @@ namespace Step37
 
 
   template <int dim, int fe_degree, typename number>
-  class LaplaceOperator : public Subscriptor
+  class LaplaceOperator : public EnableRefCountingByObserverPointer
   {
   public:
     LaplaceOperator();
@@ -171,7 +171,7 @@ namespace Step37
 
   template <int dim, int fe_degree, typename number>
   LaplaceOperator<dim, fe_degree, number>::LaplaceOperator()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
   {}
 
 
index 2661b52c6c9971cccc781676a1cce3b12eb92cf7..0d779619f3a35639dfe048f6cb59a9b102470a86 100644 (file)
@@ -87,7 +87,7 @@ namespace StokesClass
               class MassMatrixType,
               class PreconditionerA,
               class PreconditionerMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       /**
index a260a5c31e194acdec4fa713dd304adfc269d0ce..010aa43544997519a687255c2614ef69b1bb8477 100644 (file)
@@ -75,7 +75,7 @@ DummyOperator<dim, fe_degree>::operator()(
 
 
 template <int dim, int fe_degree>
-class DummyMatrixFree : public Subscriptor
+class DummyMatrixFree : public EnableRefCountingByObserverPointer
 {
 public:
   DummyMatrixFree(const Portable::MatrixFree<dim, double> &data_in,
index 7ac568cab4b4d6cf4ee4d4be18c31de23c227378..9d4d4371549c02d739be849c62cb80bd99141c85 100644 (file)
@@ -170,7 +170,7 @@ template <int dim,
           typename VectorType =
             LinearAlgebra::distributed::Vector<double, MemorySpace::Default>,
           int n_q_points_1d = fe_degree + 1>
-class MatrixFreeTest : public Subscriptor
+class MatrixFreeTest : public EnableRefCountingByObserverPointer
 {
 public:
   MatrixFreeTest(const Portable::MatrixFree<dim, Number> &data_in,
index d2c7fd1f7642be89e9cf41c20f08ae35cb0f38df..cc10048e62102b868293af0f51d128ccd63e298c 100644 (file)
@@ -46,7 +46,7 @@
 // Define a class that fills all available entries in the info objects
 // with recognizable numbers.
 template <int dim>
-class Local : public Subscriptor
+class Local : public EnableRefCountingByObserverPointer
 {
 public:
   using CellInfo = MeshWorker::IntegrationInfo<dim>;
index cf0a7135bc95d79588e00b8448fc8b612871c475..2a62b1e7ee58109f4f023badecbcb43f3efe9d8b 100644 (file)
@@ -55,7 +55,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 26628da8deb77aaf16251a9ea8ee177340d3e77b..702da3a742deb1087ce8ba833449b696de5e976b 100644 (file)
@@ -54,7 +54,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 496f7962e1a2b0e81787f02ab347a45bc05692e7..df8fd0782c634a14a4078683026487c13f612be1 100644 (file)
@@ -55,7 +55,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 888e088f797a59282fc72301f4314111f1bd91d0..754cb0de7fac088f936421bef0e9f5b81739b460 100644 (file)
@@ -58,7 +58,7 @@
 #include "../tests.h"
 
 template <int dim_, int n_components = dim_, typename Number = double>
-class Operator : public Subscriptor
+class Operator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = Number;
index 02b8013ac77b2645b3be1a706a84ef76b58a3896..67cbe0068558d938075e1721094fc1a9b664f2c7 100644 (file)
@@ -54,7 +54,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   LaplaceOperator(){};
index 7f36689221e5374f23732eda0d13084e854fcd6b..cc798860531263f430fb9507e307ac5c94f55244 100644 (file)
@@ -54,7 +54,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   LaplaceOperator(){};
@@ -400,7 +400,7 @@ private:
 
 
 template <typename LAPLACEOPERATOR>
-class MGInterfaceMatrix : public Subscriptor
+class MGInterfaceMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 0cdc6ccecb6da30a027e1566f6c96fbdecc5062a..dc145420d196a06899aff3fff098efe1d90ac5de 100644 (file)
@@ -54,7 +54,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
@@ -407,7 +407,7 @@ private:
 
 
 template <typename LAPLACEOPERATOR>
-class MGInterfaceMatrix : public Subscriptor
+class MGInterfaceMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 8f0d4851c606006942e09952347a586b78254b12..529da593afc1e849ad15cf821b7a05101ffbbf4a 100644 (file)
@@ -51,7 +51,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
@@ -404,7 +404,7 @@ private:
 
 
 template <typename LAPLACEOPERATOR>
-class MGInterfaceMatrix : public Subscriptor
+class MGInterfaceMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   void
index d3f8f71262f998154b5332c02be23b558b4f0594..f58b47531a752e6b7cf6a51500193b1fc9c6537a 100644 (file)
@@ -75,14 +75,14 @@ template <int dim,
           int n_q_points_1d = fe_degree + 1,
           typename BlockVectorType =
             LinearAlgebra::distributed::BlockVector<double>>
-class BlockLaplace : public Subscriptor
+class BlockLaplace : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = typename BlockVectorType::value_type;
   using size_type  = typename BlockVectorType::size_type;
 
   BlockLaplace()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
   {}
 
   void
index 8f0d1a9a4841060a81113b5495b42a0159c78d49..7cd7fe8b99ce9eb85449a3157a0160c1693e4947 100644 (file)
@@ -68,14 +68,14 @@ template <int dim,
           int n_q_points_1d,
           typename BlockVectorType =
             LinearAlgebra::distributed::BlockVector<double>>
-class BlockLaplace : public Subscriptor
+class BlockLaplace : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = typename BlockVectorType::value_type;
   using size_type  = typename BlockVectorType::size_type;
 
   BlockLaplace()
-    : Subscriptor()
+    : EnableRefCountingByObserverPointer()
   {}
 
   void
index 420fea1066489bc1de3384bcf1eb98a705dc4fee..bcfa3c96488a6175572e66cdea6c98aafbbb8210 100644 (file)
@@ -57,7 +57,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 455ff0fe8605b224f41b7bbcc3b95857cfb815de..75e4ea10efd0e67cad8efee6d8d3f08327731c44 100644 (file)
@@ -50,7 +50,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index e1b82044ffde7806f94aab6e822282c7cce87f4e..78fafa8ff1e5ad9ff568a580143c16767aa2688b 100644 (file)
@@ -51,7 +51,7 @@
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 347249f6d71220b76ab8ed7fa728718b81654167..65af18c078fe57a13aa19d7659560eb45ecd114b 100644 (file)
@@ -52,7 +52,7 @@ template <int dim,
           int fe_degree,
           int n_q_points_1d = fe_degree + 1,
           typename number   = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index c0ab2be5bb5f236a78f273b63a45116bbae7f2fa..09237aa19b2cffac9b56790dabc0d836b5c41ec5 100644 (file)
@@ -87,7 +87,7 @@ namespace StokesClass
               class MassMatrixType,
               class PreconditionerA,
               class PreconditionerMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       /**
index 80e3f0942717563a06cce11b0896324e50266ad8..b9d540452d45b1ab2e8ab9a87d8275f8d2644738 100644 (file)
@@ -142,7 +142,7 @@ diff(Vector<double>        &diff,
 
 
 template <int dim>
-class OutputCreator : public Subscriptor
+class OutputCreator : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 67033d8d63c4da782fdc8d5aa58f8457e8f09e6c..d490c12ef39ad691ba5d71f17a139274d308b98b 100644 (file)
@@ -189,7 +189,7 @@ print(const DoFHandler<dim>          &dof,
 }
 
 template <int dim>
-class OutputCreator : public Subscriptor
+class OutputCreator : public EnableRefCountingByObserverPointer
 {
 public:
   void
index 388e6e92b7a09ea1e37a53b1781dc47c0d14408f..93fc1c10be0dae002465e06a4269eb10ab8b9e57 100644 (file)
@@ -88,7 +88,7 @@ namespace StokesClass
               class MassMatrixType,
               class PreconditionerA,
               class PreconditionerMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       /**
index 022cd1cbc24eefb6cf4b4ccd110bfb39e70a6f0b..292bc38b741f553d2049cd2632b907ab54a36d42 100644 (file)
@@ -204,7 +204,7 @@ RightHandSide<dim>::value_list(const std::vector<Point<dim>> &vp,
 
 
 template <class MatrixType, class PreconditionerType>
-class InverseMatrix : public Subscriptor
+class InverseMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   InverseMatrix(const MatrixType &m, const PreconditionerType &preconditioner);
@@ -243,7 +243,7 @@ InverseMatrix<MatrixType, PreconditionerType>::vmult(
 
 
 template <class PreconditionerType>
-class SchurComplement : public Subscriptor
+class SchurComplement : public EnableRefCountingByObserverPointer
 {
 public:
   SchurComplement(
index 95c416e3b1ef0d8eb7c040182a82086a22fb0e7e..ca28f3a6c893077b54a20cb3e5e59f4aa9f3c7df 100644 (file)
@@ -79,7 +79,7 @@ dealii::ConditionalOStream debug_output(std::cout, false);
 
 
 template <int dim, typename number = double>
-class LaplaceOperator : public Subscriptor
+class LaplaceOperator : public EnableRefCountingByObserverPointer
 {
 public:
   using value_type = number;
index 0a0a9f60c68a3eaf28e0f65a1d3db188c211d696..9f44ee99b37f33e9dc687281a4870e7ed49e7210 100644 (file)
@@ -202,7 +202,7 @@ RightHandSide<dim>::value_list(const std::vector<Point<dim>> &vp,
 
 
 template <class MatrixType, class PreconditionerType>
-class InverseMatrix : public Subscriptor
+class InverseMatrix : public EnableRefCountingByObserverPointer
 {
 public:
   InverseMatrix(const MatrixType &m, const PreconditionerType &preconditioner);
@@ -241,7 +241,7 @@ InverseMatrix<MatrixType, PreconditionerType>::vmult(
 
 
 template <class PreconditionerType>
-class SchurComplement : public Subscriptor
+class SchurComplement : public EnableRefCountingByObserverPointer
 {
 public:
   SchurComplement(
index 7b1c88a4feaafb050c27777909dff0be7365403d..1649405ad9a8665a928d31c23ff4c2fa2f4da0ad 100644 (file)
@@ -22,7 +22,7 @@
  * and exceptions handling for PETSCWrappers::NonlinearSolver.
  */
 
-class VectorType : public Subscriptor
+class VectorType : public EnableRefCountingByObserverPointer
 {
 public:
   explicit VectorType(Vec v)
@@ -39,7 +39,7 @@ private:
   Vec v;
 };
 
-class MatrixType : public Subscriptor
+class MatrixType : public EnableRefCountingByObserverPointer
 {
 public:
   explicit MatrixType(Mat A)
index a052f609ec4118b766a172c6588a35a3160398df..27887db8e4039d79b556161bd6d171f5211a5ff0 100644 (file)
@@ -22,7 +22,7 @@
  * and exceptions handling for PETSCWrappers::TimeStepper.
  */
 
-class VectorType : public Subscriptor
+class VectorType : public EnableRefCountingByObserverPointer
 {
 public:
   explicit VectorType(Vec v)
@@ -39,7 +39,7 @@ private:
   Vec v;
 };
 
-class MatrixType : public Subscriptor
+class MatrixType : public EnableRefCountingByObserverPointer
 {
 public:
   explicit MatrixType(Mat A)
index 1c609ce6e39705d43d9f29402956c1405f277170..7f42cbfe4e50fa8a21afe9420f2c73072fc9f306 100644 (file)
@@ -129,7 +129,7 @@ namespace Step31
   namespace LinearSolvers
   {
     template <class MatrixType, class PreconditionerType>
-    class InverseMatrix : public Subscriptor
+    class InverseMatrix : public EnableRefCountingByObserverPointer
     {
     public:
       InverseMatrix(const MatrixType         &m,
@@ -169,7 +169,7 @@ namespace Step31
         }
     }
     template <class PreconditionerTypeA, class PreconditionerTypeMp>
-    class BlockSchurPreconditioner : public Subscriptor
+    class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
     {
     public:
       BlockSchurPreconditioner(
index 3535122595f7972e09cfab7f9d9047d3a723b0fd..f519d446f4307e1ac97d0cc326f11cd267a8447a 100644 (file)
@@ -118,7 +118,7 @@ namespace Step55
     // with an option to specify a preconditioner, and to allow for different
     // vector types in the vmult function.
     template <class Matrix, class Preconditioner>
-    class InverseMatrix : public Subscriptor
+    class InverseMatrix : public EnableRefCountingByObserverPointer
     {
     public:
       InverseMatrix(const Matrix &m, const Preconditioner &preconditioner);
@@ -170,7 +170,8 @@ namespace Step55
     // The class A template class for a simple block diagonal preconditioner
     // for 2x2 matrices.
     template <class PreconditionerA, class PreconditionerS>
-    class BlockDiagonalPreconditioner : public Subscriptor
+    class BlockDiagonalPreconditioner
+      : public EnableRefCountingByObserverPointer
     {
     public:
       BlockDiagonalPreconditioner(const PreconditionerA &preconditioner_A,
index 7e2c8e8252d5901e1d049d28e53ff3729c3facf3..1e0818bbb170f354f140961c953ade2aee4afff6 100644 (file)
@@ -259,7 +259,7 @@ namespace Step56
   }
 
   template <class PreconditionerAType, class PreconditionerSType>
-  class BlockSchurPreconditioner : public Subscriptor
+  class BlockSchurPreconditioner : public EnableRefCountingByObserverPointer
   {
   public:
     BlockSchurPreconditioner(

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.