#include "config.h"
#include "SharedBuffer.h"
#include "PurgeableBuffer.h"
namespace WebCore {
SharedBuffer::SharedBuffer()
{
}
SharedBuffer::SharedBuffer(const char* data, int size)
{
m_buffer.append(data, size);
}
SharedBuffer::SharedBuffer(const unsigned char* data, int size)
{
m_buffer.append(data, size);
}
SharedBuffer::~SharedBuffer()
{
}
PassRefPtr<SharedBuffer> SharedBuffer::adoptVector(Vector<char>& vector)
{
RefPtr<SharedBuffer> buffer = create();
buffer->m_buffer.swap(vector);
return buffer.release();
}
PassRefPtr<SharedBuffer> SharedBuffer::adoptPurgeableBuffer(PurgeableBuffer* purgeableBuffer)
{
ASSERT(!purgeableBuffer->isPurgeable());
RefPtr<SharedBuffer> buffer = create();
buffer->m_purgeableBuffer.set(purgeableBuffer);
return buffer.release();
}
unsigned SharedBuffer::size() const
{
if (hasPlatformData())
return platformDataSize();
if (m_purgeableBuffer)
return m_purgeableBuffer->size();
return m_buffer.size();
}
const char* SharedBuffer::data() const
{
if (hasPlatformData())
return platformData();
if (m_purgeableBuffer)
return m_purgeableBuffer->data();
return m_buffer.data();
}
void SharedBuffer::append(const char* data, int len)
{
ASSERT(!m_purgeableBuffer);
maybeTransferPlatformData();
m_buffer.append(data, len);
}
void SharedBuffer::clear()
{
clearPlatformData();
m_buffer.clear();
m_purgeableBuffer.clear();
}
PassRefPtr<SharedBuffer> SharedBuffer::copy() const
{
return SharedBuffer::create(data(), size());
}
PurgeableBuffer* SharedBuffer::releasePurgeableBuffer()
{
ASSERT(hasOneRef());
return m_purgeableBuffer.release();
}
#if !PLATFORM(CF)
inline void SharedBuffer::clearPlatformData()
{
}
inline void SharedBuffer::maybeTransferPlatformData()
{
}
inline bool SharedBuffer::hasPlatformData() const
{
return false;
}
inline const char* SharedBuffer::platformData() const
{
ASSERT_NOT_REACHED();
return 0;
}
inline unsigned SharedBuffer::platformDataSize() const
{
ASSERT_NOT_REACHED();
return 0;
}
#endif
}