124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DataBufferHeap.cpp --------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataBufferHeap.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Default constructor
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDataBufferHeap::DataBufferHeap () :
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_data()
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Initialize this class with "n" characters and fill the buffer
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// with "ch".
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
26fe6dc6e241c52822710380cec0931351a1d7b2d3Greg ClaytonDataBufferHeap::DataBufferHeap (lldb::offset_t n, uint8_t ch) :
27772a66793b0eb14b1bc6c4255b9b33610df8a488Greg Clayton    m_data()
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
29772a66793b0eb14b1bc6c4255b9b33610df8a488Greg Clayton    if (n < m_data.max_size())
30772a66793b0eb14b1bc6c4255b9b33610df8a488Greg Clayton        m_data.assign (n, ch);
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Initialize this class with a copy of the "n" bytes from the "bytes"
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// buffer.
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
37fe6dc6e241c52822710380cec0931351a1d7b2d3Greg ClaytonDataBufferHeap::DataBufferHeap (const void *src, lldb::offset_t src_len) :
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_data()
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CopyData (src, src_len);
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Virtual destructor since this class inherits from a pure virtual
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// base class.
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDataBufferHeap::~DataBufferHeap ()
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Return a pointer to the bytes owned by this object, or NULL if
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// the object contains no bytes.
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint8_t *
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDataBufferHeap::GetBytes ()
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (m_data.empty())
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return NULL;
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return &m_data[0];
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Return a const pointer to the bytes owned by this object, or NULL
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if the object contains no bytes.
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst uint8_t *
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDataBufferHeap::GetBytes () const
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (m_data.empty())
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return NULL;
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return &m_data[0];
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Return the number of bytes this object currently contains.
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
78fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Claytonuint64_t
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDataBufferHeap::GetByteSize () const
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return m_data.size();
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Sets the number of bytes that this object should be able to
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// contain. This can be used prior to copying data into the buffer.
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
89fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Claytonuint64_t
90fe6dc6e241c52822710380cec0931351a1d7b2d3Greg ClaytonDataBufferHeap::SetByteSize (uint64_t new_size)
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_data.resize(new_size);
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return m_data.size();
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
97fe6dc6e241c52822710380cec0931351a1d7b2d3Greg ClaytonDataBufferHeap::CopyData (const void *src, uint64_t src_len)
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const uint8_t *src_u8 = (const uint8_t *)src;
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (src && src_len > 0)
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_data.assign (src_u8, src_u8 + src_len);
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_data.clear();
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10652f792329be5db8e38961350589e97e8f2823acdGreg Claytonvoid
10752f792329be5db8e38961350589e97e8f2823acdGreg ClaytonDataBufferHeap::Clear()
10852f792329be5db8e38961350589e97e8f2823acdGreg Clayton{
10952f792329be5db8e38961350589e97e8f2823acdGreg Clayton    buffer_t empty;
11052f792329be5db8e38961350589e97e8f2823acdGreg Clayton    m_data.swap(empty);
11152f792329be5db8e38961350589e97e8f2823acdGreg Clayton}
112