ReferenceCounter Class Reference

#include <reference_counter.h>

Inheritance diagram for ReferenceCounter:

List of all members.

Public Member Functions

virtual ~ReferenceCounter ()

Static Public Member Functions

static std::string get_info ()
static void print_info ()
static unsigned int n_objects ()

Protected Types

typedef std::map< std::string,
std::pair< unsigned int,
unsigned int > > 
Counts

Protected Member Functions

 ReferenceCounter ()
void increment_constructor_count (const std::string &name)
void increment_destructor_count (const std::string &name)

Static Protected Attributes

static Counts _counts
static Threads::atomic
< unsigned int > 
_n_objects
static Threads::spin_mutex _mutex


Detailed Description

This is the base class for enabling reference counting. It should not be used by the user, thus it has a private constructor.

Author:
Benjamin S. Kirk, 2002-2007

Definition at line 44 of file reference_counter.h.


Member Typedef Documentation

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > ReferenceCounter::Counts [protected]

Data structure to log the information. The log is identified by the class name.

Definition at line 105 of file reference_counter.h.


Constructor & Destructor Documentation

ReferenceCounter::ReferenceCounter (  )  [inline, protected]

Constructor. Protected so that you cannont instantiate a ReferenceCounter, only derive from it.

Definition at line 130 of file reference_counter.h.

References _n_objects.

00131 {
00132   _n_objects++;
00133 }

ReferenceCounter::~ReferenceCounter (  )  [inline, virtual]

Destructor.

Definition at line 137 of file reference_counter.h.

References _n_objects.

00138 {
00139   _n_objects--;
00140 }


Member Function Documentation

std::string ReferenceCounter::get_info (  )  [static]

Gets a string containing the reference information.

Definition at line 45 of file reference_counter.C.

References _counts, and QuadratureRules::name().

Referenced by print_info().

00046 {
00047 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
00048 
00049   std::ostringstream out;
00050   
00051   out << '\n'
00052       << " ---------------------------------------------------------------------------- \n"
00053       << "| Reference count information                                                |\n"
00054       << " ---------------------------------------------------------------------------- \n";
00055   
00056   for (Counts::iterator it = _counts.begin();
00057        it != _counts.end(); ++it)
00058     {
00059       const std::string name(it->first);
00060       const unsigned int creations    = it->second.first;
00061       const unsigned int destructions = it->second.second;
00062 
00063       out << "| " << name << " reference count information:\n"
00064           << "|  Creations:    " << creations    << '\n'
00065           << "|  Destructions: " << destructions << '\n';
00066     }
00067   
00068   out << " ---------------------------------------------------------------------------- \n";
00069 
00070   return out.str();
00071 
00072 #else
00073 
00074   return "";
00075   
00076 #endif
00077 }

void ReferenceCounter::increment_constructor_count ( const std::string &  name  )  [inline, protected]

Increments the construction counter. Should be called in the constructor of any derived class that will be reference counted.

Definition at line 149 of file reference_counter.h.

References _counts, and Threads::spin_mtx.

Referenced by ReferenceCountedObject< SparseMatrix< T > >::ReferenceCountedObject().

00150 {
00151   Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
00152   std::pair<unsigned int, unsigned int>& p = _counts[name];
00153 
00154   p.first++;
00155 }

void ReferenceCounter::increment_destructor_count ( const std::string &  name  )  [inline, protected]

Increments the destruction counter. Should be called in the destructor of any derived class that will be reference counted.

Definition at line 167 of file reference_counter.h.

References _counts, and Threads::spin_mtx.

Referenced by ReferenceCountedObject< SparseMatrix< T > >::~ReferenceCountedObject().

00168 {
00169   Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
00170   std::pair<unsigned int, unsigned int>& p = _counts[name];
00171 
00172   p.second++;
00173 }

static unsigned int ReferenceCounter::n_objects (  )  [inline, static]

Prints the number of outstanding (created, but not yet destroyed) objects.

Definition at line 76 of file reference_counter.h.

References _n_objects.

00077   { return _n_objects; }

void ReferenceCounter::print_info (  )  [static]

Prints the reference information to std::cout.

Definition at line 83 of file reference_counter.C.

References get_info().

00084 {
00085 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
00086   
00087   std::cout << ReferenceCounter::get_info();
00088   
00089 #endif
00090 }


Member Data Documentation

Actually holds the data.

Definition at line 110 of file reference_counter.h.

Referenced by get_info(), increment_constructor_count(), and increment_destructor_count().

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 123 of file reference_counter.h.

Threads::atomic< unsigned int > ReferenceCounter::_n_objects [static, protected]

The number of objects. Print the reference count information when the number returns to 0.

Definition at line 118 of file reference_counter.h.

Referenced by n_objects(), ReferenceCounter(), and ~ReferenceCounter().


The documentation for this class was generated from the following files:

Site Created By: libMesh Developers
Last modified: November 25 2009 03:44:56.

Hosted By:
SourceForge.net Logo