From d27290775ace9fe1b114b7556a60702d6b7cd56c Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Wed, 12 Apr 2000 19:21:37 +0000 Subject: [PATCH] Subscriptor prints class name git-svn-id: https://svn.dealii.org/trunk@2706 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/base/include/base/subscriptor.h | 39 +++++++++++++++++++++++-- deal.II/base/source/subscriptor.cc | 21 ++++++++++--- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/deal.II/base/include/base/subscriptor.h b/deal.II/base/include/base/subscriptor.h index a70a225e82..9728a01d3d 100644 --- a/deal.II/base/include/base/subscriptor.h +++ b/deal.II/base/include/base/subscriptor.h @@ -18,6 +18,10 @@ #include #endif +#ifndef QUIET_SUBSCRIPTOR +#include +#include +#endif /** * Handling of subscriptions. @@ -39,13 +43,19 @@ class Subscriptor */ Subscriptor(); +#ifndef QUIET_SUBSCRIPTOR + /** + * Destructor, asserting that the counter + * is zero. + */ + virtual ~Subscriptor(); +#else /** * Destructor, asserting that the counter * is zero. */ - ~Subscriptor(); - +#endif /** * Copy-constructor. * @@ -86,7 +96,17 @@ class Subscriptor * object. */ unsigned int n_subscriptions () const; - + +#ifndef QUIET_SUBSCRIPTOR + /** + * Exception: + * Object may not be deleted, since + * it is used. + */ + DeclException2(ExcInUse, + int, string&, + << "Object of class " << arg2 << " is still used by " << arg1 << " other objects."); +#else /** * Exception: * Object may not be deleted, since @@ -95,6 +115,8 @@ class Subscriptor DeclException1(ExcInUse, int, << "This object is still used by " << arg1 << " other objects."); +#endif + /** * Exception: object should be used * when #unsubscribe# is called. @@ -119,6 +141,17 @@ class Subscriptor * objects also. */ mutable unsigned int counter; +#ifndef QUIET_SUBSCRIPTOR + /** + * Storage for the class name. + * Since the name of the derived + * class is neither available in + * the destructor, nor in the + * constructor, we obtain it in + * between and store it here. + */ + mutable string classname; +#endif }; diff --git a/deal.II/base/source/subscriptor.cc b/deal.II/base/source/subscriptor.cc index 72e6ab803a..46533df951 100644 --- a/deal.II/base/source/subscriptor.cc +++ b/deal.II/base/source/subscriptor.cc @@ -25,17 +25,30 @@ Subscriptor::Subscriptor (const Subscriptor &) : {}; -Subscriptor::~Subscriptor () { +Subscriptor::~Subscriptor () +{ +#ifndef QUIET_SUBSCRIPTOR + Assert (counter == 0, ExcInUse(counter, classname )); +#else Assert (counter == 0, ExcInUse(counter)); -}; +#endif +} -Subscriptor & Subscriptor::operator = (const Subscriptor &) { +Subscriptor & Subscriptor::operator = (const Subscriptor &) +{ return *this; }; -void Subscriptor::subscribe () const { +void Subscriptor::subscribe () const +{ +#ifdef DEBUG +#ifndef QUIET_SUBSCRIPTOR + if(classname.size() == 0) + classname = string(typeid(*this).name()); +#endif +#endif ++counter; }; -- 2.39.5