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

#ifndef liblldb_DataBuffer_h_
#define liblldb_DataBuffer_h_
#if defined(__cplusplus)

#include <stdint.h>
#include <string.h>

namespace lldb_private {

//----------------------------------------------------------------------
/// @class DataBuffer DataBuffer.h "lldb/Core/DataBuffer.h"
/// @brief A pure virtual protocol class for abstracted data buffers.
///
/// DataBuffer is an abtract class that gets packaged into a shared pointer
/// that can use to implement various ways to store data (on the heap,
/// memory mapped, cached inferior memory). It gets used by DataExtractor
/// so many DataExtractor objects can share the same data and sub-ranges
/// of that shared data, and the last object that contains a reference
/// to the shared data will free it.
///
/// Subclasses can implement as many different constructors or member
/// functions that allow data to be stored in the object's buffer prior
/// to handing the shared data to clients that use these buffers.
///
/// All subclasses must override all of the pure virtual functions as
/// they are used by clients to access the data. Having a common
/// interface allows different ways of storing data, yet using it in
/// one common way.
///
/// This class currently expects all data to be available without any
/// extra calls being made, but we can modify it to optionally get
/// data on demand with some extra function calls to load the data
/// before it gets accessed.
//----------------------------------------------------------------------
class DataBuffer
{
public:
    //------------------------------------------------------------------
    /// Destructor
    ///
    /// The destructor is virtual as other classes will inherit from
    /// this class and be downcast to the DataBuffer pure virtual
    /// interface. The virtual destructor ensures that destructing the
    /// base class will destruct the class that inherited from it
    /// correctly.
    //------------------------------------------------------------------
    virtual
    ~DataBuffer()
    {
    }

    //------------------------------------------------------------------
    /// Get a pointer to the data.
    ///
    /// @return
    ///     A pointer to the bytes owned by this object, or NULL if the
    ///     object contains no bytes.
    //------------------------------------------------------------------
    virtual uint8_t *
    GetBytes () = 0;

    //------------------------------------------------------------------
    /// Get a const pointer to the data.
    ///
    /// @return
    ///     A const pointer to the bytes owned by this object, or NULL
    ///     if the object contains no bytes.
    //------------------------------------------------------------------
    virtual const uint8_t *
    GetBytes () const = 0;

    //------------------------------------------------------------------
    /// Get the number of bytes in the data buffer.
    ///
    /// @return
    ///     The number of bytes this object currently contains.
    //------------------------------------------------------------------
    virtual size_t
    GetByteSize() const = 0;
};

} // namespace lldb_private

#endif  /// #if defined(__cplusplus)
#endif  /// lldb_DataBuffer_h_
