jes/src/core/EncodedString.cc

39 lines
982 B
C++

#include "EncodedString.h"
#include <string.h>
uint32_t EncodedString::iterator::operator*()
{
if (m_offset >= m_encoded_string.size())
{
return INVALID_CODE_POINT;
}
return Encoding::decode(m_encoded_string.encoding(), &m_encoded_string[m_offset]);
}
EncodedString::iterator & EncodedString::iterator::operator++()
{
if (m_offset < m_encoded_string.size())
{
m_offset += Encoding::num_bytes_in_code_point(m_encoded_string.encoding(), &m_encoded_string[m_offset]);
}
return *this;
}
EncodedString::EncodedString(const uint8_t * data, size_t size, Encoding::Type encoding)
: m_encoding(encoding),
m_size(size)
{
m_data = std::shared_ptr<uint8_t>(new uint8_t[size], std::default_delete<uint8_t[]>());
memcpy(&*m_data, data, size);
}
EncodedString::iterator EncodedString::begin() const
{
return iterator(*this, 0u);
}
EncodedString::iterator EncodedString::end() const
{
return iterator(*this, m_size);
}