#ifndef _utl_CountedObjectRegistry_h_ #define _utl_CountedObjectRegistry_h_ /** \file Registry for all counted objects \author Lukas Nellen \version $Id: CountedObjectRegistry.h 14717 2009-09-17 20:24:36Z lukas $ \date 13 Jan 2004 */ #include #include #include #include namespace utl { /** \class CountedObjectRegistry CountedObjectRegistry.h "utl/CountedObjectRegistry.h" \brief Registry for counted objects This class maintains a global register of all objects that use the \c CountedObject template. This provides a way to generate statistics about all counted objects. \author Lukas Nellen \date 13 Jan 2004 \ingroup stl */ class CountedObjectRegistry { public: typedef long int Counter; ~CountedObjectRegistry(); template static void RegisterCountedObject() { RegisterObjectCounters(typeid(typename T::CountedType), T::GetObjectsCreated, T::GetObjectsDestroyed, T::GetObjectsExisting, T::GetObjectsCopied, T::GetObjectsAssigned); } static void PrintStatistics(std::ostream& theStream, const std::string& filter = ""); private: CountedObjectRegistry(); typedef Counter (*intFP)(); class Counters { public: Counters(const intFP countCreated, const intFP countDestroyed, const intFP countExisting, const intFP countCopied, const intFP countAssigned); Counter GetCreated() const; Counter GetDestroyed() const; Counter GetExisting() const; Counter GetCopied() const; Counter GetAssigned() const; private: intFP fCountCreated; intFP fCountDestroyed; intFP fCountExisting; intFP fCountCopied; intFP fCountAssigned; }; static void RegisterObjectCounters(const std::type_info& theType, const intFP countCreated, const intFP countDestroyed, const intFP countExisting, const intFP countCopied, const intFP countAssigned); static std::map gfRegistry; }; } #endif // Configure (x)emacs for this file ... // Local Variables: // mode: c++ // compile-command: "make -C .. -k" // End: