//===-- Baton.h -------------------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef lldb_Baton_h_
#define lldb_Baton_h_

// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-include.h"

namespace lldb_private {

//----------------------------------------------------------------------
/// @class Baton Baton.h "lldb/Core/Baton.h"
/// @brief A class designed to wrap callback batons so they can cleanup
///        any acquired resources
///
/// This class is designed to be used by any objects that have a 
/// callback function that takes a baton where the baton might need to
/// free/delete/close itself.
///
/// The default behavior is to not free anything. Subclasses can 
/// free any needed resources in their destructors.
//----------------------------------------------------------------------
class Baton
{
public:
	explicit Baton(void *p) :
        m_data (p)
    {
    }

	virtual 
    ~Baton()
    {
        // The default destructor for a baton does NOT attempt to clean up
        // anything in m_baton
    }
	
    virtual void
    GetDescription (Stream *s, lldb::DescriptionLevel level) const;

	void *m_data;  // Leave baton public for easy access

private:
	//------------------------------------------------------------------
	// For Baton only
	//------------------------------------------------------------------
    DISALLOW_COPY_AND_ASSIGN (Baton);
};

} // namespace lldb_private

#endif	// lldb_Baton_h_
