## NAME

ACE_Dumpable - Base class that defines a uniform interface for all object dumping.

## SYNOPSIS

    #include <ace/Dump.h>

    class ACE_Dumpable
    {
      public:
        friend class ACE_ODB;
        friend class ACE_Dumpable_Ptr;
        ACE_Dumpable (const void *);
        virtual void dump (void) const = 0;
      protected:
        virtual ~ACE_Dumpable (void);
      private:
        const void *this_;
    };

## 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.

## PUBLIC MEMBERS

    friend class ACE_ODB;

    friend class ACE_Dumpable_Ptr;

    ACE_Dumpable (const void *);

Constructor.

    virtual void dump (void) const = 0;

This pure virtual method must be filled in by a subclass.

## PROTECTED MEMBERS

    virtual ~ACE_Dumpable (void);

## PRIVATE MEMBERS

    const void *this_;

Pointer to the object that is being stored.

## AUTHOR

Doug Schmidt

## LIBRARY

ace