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