#include "drape/buffer_base.hpp"
#include "base/assert.hpp"

namespace dp
{

BufferBase::BufferBase(uint8_t elementSize, uint32_t capacity)
  : m_elementSize(elementSize)
  , m_capacity(capacity)
  , m_size(0)
{
}

uint32_t BufferBase::GetCapacity() const
{
  return m_capacity;
}

uint32_t BufferBase::GetCurrentSize() const
{
  return m_size;
}

uint32_t BufferBase::GetAvailableSize() const
{
  return m_capacity - m_size;
}

void BufferBase::Resize(uint32_t elementCount)
{
  m_capacity = elementCount;
  m_size = 0;
}

uint8_t BufferBase::GetElementSize() const
{
  return m_elementSize;
}

void BufferBase::Seek(uint32_t elementNumber)
{
  ASSERT(elementNumber <= m_capacity, ());
  m_size = elementNumber;
}

void BufferBase::UploadData(uint32_t elementCount)
{
  ASSERT(m_size + elementCount <= m_capacity, ());
  m_size += elementCount;
}

void BufferBase::SetDataSize(uint32_t elementCount)
{
  ASSERT(elementCount <= m_capacity, ());
  m_size = elementCount;
}

} // namespace dp