summaryrefslogtreecommitdiff
path: root/ace/Dump.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Dump.h')
-rw-r--r--ace/Dump.h166
1 files changed, 0 insertions, 166 deletions
diff --git a/ace/Dump.h b/ace/Dump.h
deleted file mode 100644
index 51e8e0d5a9b..00000000000
--- a/ace/Dump.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- C++ -*- */
-// $Id$
-
-
-// ============================================================================
-//
-// = LIBRARY
-// ace
-//
-// = FILENAME
-// Dump.h
-//
-// = DESCRIPTION
-//
-// A prototype mechanism that allow all ACE objects to be registered
-// with a central in-memory "database" that can dump the state of all
-// live ACE objects (e.g., from within a debugger).
-//
-// To turn on this feature simply compile with -DACE_NDEBUG
-//
-// There are several interesting aspects to this design:
-//
-// 1. It uses the External Polymorphism pattern to avoid having to
-// derive all ACE classes from a common base class that has virtual
-// methods (this is crucial to avoid unnecessary overhead). In
-// addition, there is no additional space added to ACE objects
-// (this is crucial to maintain binary layout compatibility).
-//
-// 2. This mechanism can be conditionally compiled in order to
-// completely disable this feature entirely. Moreover, by
-// using macros there are relatively few changes to ACE code.
-//
-// 3. This mechanism copes with single-inheritance hierarchies of
-// dumpable classes. In such cases we typically want only one
-// dump, corresponding to the most derived instance. Thanks to
-// Christian Millour (chris@etca.fr) for illustrating how to do
-// this. Note, however, that this scheme doesn't generalize to
-// work with multiple-inheritance or virtual base classes.
-//
-// Future work includes:
-//
-// 1. Using a dynamic object table rather than a static table
-//
-// 2. Adding support to allow particular classes of objects to
-// be selectively dumped.
-//
-// = AUTHOR
-// Doug Schmidt
-//
-// ============================================================================
-
-#if !defined (ACE_DUMP_H)
-#define ACE_DUMP_H
-
-#include "ace/Synch.h"
-
-class ACE_Export ACE_Dumpable
- // = TITLE
- // Base class that defines a uniform interface for all object
- // dumping.
-{
-friend class ACE_ODB;
-friend class ACE_Dumpable_Ptr;
-public:
- ACE_Dumpable (const void *);
-
- virtual void dump (void) const = 0;
- // This pure virtual method must be filled in by a subclass.
-
-protected:
- virtual ~ACE_Dumpable (void);
-
-private:
- const void *this_;
- // Pointer to the object that is being stored.
-};
-
-class ACE_Export ACE_Dumpable_Ptr
- // = TITLE
- // A smart pointer stored in the in-memory object database
- // ACE_ODB. The pointee (if any) is deleted when reassigned.
-{
-public:
- ACE_Dumpable_Ptr (const ACE_Dumpable *dumper = 0);
- const ACE_Dumpable *operator->() const;
- void operator= (const ACE_Dumpable *dumper) const;
-
-private:
- const ACE_Dumpable *dumper_;
- // "Real" pointer to the underlying abstract base class
- // pointer that does the real work.
-};
-
-class ACE_Export ACE_ODB
- // = TITLE
- // This is the object database (ODB) that keeps track of all
- // live ACE objects.
-{
-public:
- enum {MAX_TABLE_SIZE = 100000}; // This is clearly inadequate and should be dynamic...
-
- void dump_objects (void);
- // Iterates through the entire set of registered objects and
- // dumps their state.
-
- void register_object (const ACE_Dumpable *dumper);
- // Add the tuple <dumper, this_> to the list of registered ACE objects.
-
- void remove_object (const void *this_);
- // Use <this_> to locate and remove the associated <dumper> from the
- // list of registered ACE objects.
-
- static ACE_ODB *instance (void);
- // Interface to the Singleton instance of the object database.
-
-private:
- ACE_ODB (void); // Ensure we have a Singleton...
-
- struct Tuple
- {
- const void *this_;
- // Pointer to the object that is registered.
-
- const ACE_Dumpable_Ptr dumper_;
- // Smart pointer to the ACE_Dumpable object associated with this_.
- // This uses an ACE_Dumpable_Ptr, instead of a bare pointer, to
- // cope with hierarchies of dumpable classes. In such cases we
- // typically want only one dump, corresponding to the most derived
- // instance. To achieve this, the handle registered for the
- // subobject corresponding to the base class is destroyed (hence
- // on destruction of the subobject its handle won't exist anymore
- // and we'll have to check for that).
- Tuple() : dumper_(0) {}
- };
-
- static ACE_ODB *instance_;
- // Singleton instance of this class.
-
- Tuple object_table_[ACE_ODB::MAX_TABLE_SIZE];
- // The current implementation is very simple-minded and will be
- // changed to be dynamic.
-
- int current_size_;
- // Current size of <object_table_>.
-
-#if defined (ACE_MT_SAFE)
- static ACE_Thread_Mutex ace_dump_lock_;
- // Double-Check lock.
-#endif /* ACE_MT_SAFE */
-};
-
-#include "ace/Dump_T.h"
-
-// Some useful macros for conditionally compiling this feature...
-#if defined (ACE_NDEBUG)
-#define ACE_REGISTER_OBJECT(CLASS)
-#define ACE_REMOVE_OBJECT
-#else
-#define ACE_REGISTER_OBJECT(CLASS) \
- ACE_ODB::instance ()->register_object \
- (new ACE_Dumpable_Adapter<CLASS> (this));
-#define ACE_REMOVE_OBJECT \
- ACE_ODB::instance ()->remove_object \
- ((void *) this);
-#endif /* ACE_NDEBUG */
-#endif /* ACE_DUMP_H */