mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-17 20:52:37 +01:00
Cleanup.
This commit is contained in:
@@ -23,153 +23,6 @@
|
||||
|
||||
namespace bx
|
||||
{
|
||||
/// Non-zero-terminated string view.
|
||||
class StringView
|
||||
{
|
||||
public:
|
||||
StringView()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
StringView(const StringView& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
}
|
||||
|
||||
StringView& operator=(const StringView& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
StringView(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
set(_ptr, _len);
|
||||
}
|
||||
|
||||
void set(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
clear();
|
||||
|
||||
if (NULL != _ptr)
|
||||
{
|
||||
uint32_t len = UINT32_MAX == _len ? strlen(_ptr) : _len;
|
||||
if (0 != len)
|
||||
{
|
||||
m_len = len;
|
||||
m_ptr = _ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_ptr = "";
|
||||
m_len = 0;
|
||||
}
|
||||
|
||||
const char* getPtr() const
|
||||
{
|
||||
return m_ptr;
|
||||
}
|
||||
|
||||
const char* getTerm() const
|
||||
{
|
||||
return m_ptr + m_len;
|
||||
}
|
||||
|
||||
bool isEmpty() const
|
||||
{
|
||||
return 0 == m_len;
|
||||
}
|
||||
|
||||
uint32_t getLength() const
|
||||
{
|
||||
return m_len;
|
||||
}
|
||||
|
||||
protected:
|
||||
friend uint32_t hashMurmur2A(const StringView& _data);
|
||||
|
||||
const char* m_ptr;
|
||||
uint32_t m_len;
|
||||
};
|
||||
|
||||
inline uint32_t hashMurmur2A(const StringView& _data)
|
||||
{
|
||||
return hashMurmur2A(_data.m_ptr, _data.m_len);
|
||||
}
|
||||
|
||||
inline uint32_t hashMurmur2A(const char* _data)
|
||||
{
|
||||
return hashMurmur2A(StringView(_data) );
|
||||
}
|
||||
|
||||
/// ASCII string
|
||||
template<bx::AllocatorI** AllocatorT>
|
||||
class StringT : public StringView
|
||||
{
|
||||
public:
|
||||
StringT()
|
||||
: StringView("", 0)
|
||||
{
|
||||
}
|
||||
|
||||
StringT(const StringT<AllocatorT>& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
}
|
||||
|
||||
StringT<AllocatorT>& operator=(const StringT<AllocatorT>& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
StringT(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
set(_ptr, _len);
|
||||
}
|
||||
|
||||
StringT(const StringView& _rhs)
|
||||
{
|
||||
set(_rhs.getPtr(), _rhs.getLength() );
|
||||
}
|
||||
|
||||
~StringT()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void set(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
clear();
|
||||
|
||||
if (0 != _len)
|
||||
{
|
||||
uint32_t len = UINT32_MAX == _len ? strlen(_ptr) : _len;
|
||||
m_len = len;
|
||||
char* ptr = (char*)BX_ALLOC(*AllocatorT, len+1);
|
||||
|
||||
memcpy(ptr, _ptr, len);
|
||||
ptr[len] = '\0';
|
||||
|
||||
*const_cast<char**>(&m_ptr) = ptr;
|
||||
}
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
if (0 != m_len)
|
||||
{
|
||||
BX_FREE(*AllocatorT, const_cast<char*>(m_ptr) );
|
||||
|
||||
StringView::clear();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
///
|
||||
inline bool toBool(const char* _str)
|
||||
{
|
||||
@@ -678,6 +531,153 @@ namespace bx
|
||||
return(dlen + (s - _src)); /* count does not include NUL */
|
||||
}
|
||||
|
||||
/// Non-zero-terminated string view.
|
||||
class StringView
|
||||
{
|
||||
public:
|
||||
StringView()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
StringView(const StringView& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
}
|
||||
|
||||
StringView& operator=(const StringView& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
StringView(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
set(_ptr, _len);
|
||||
}
|
||||
|
||||
void set(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
clear();
|
||||
|
||||
if (NULL != _ptr)
|
||||
{
|
||||
uint32_t len = uint32_t(strnlen(_ptr, _len) );
|
||||
if (0 != len)
|
||||
{
|
||||
m_len = len;
|
||||
m_ptr = _ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_ptr = "";
|
||||
m_len = 0;
|
||||
}
|
||||
|
||||
const char* getPtr() const
|
||||
{
|
||||
return m_ptr;
|
||||
}
|
||||
|
||||
const char* getTerm() const
|
||||
{
|
||||
return m_ptr + m_len;
|
||||
}
|
||||
|
||||
bool isEmpty() const
|
||||
{
|
||||
return 0 == m_len;
|
||||
}
|
||||
|
||||
uint32_t getLength() const
|
||||
{
|
||||
return m_len;
|
||||
}
|
||||
|
||||
protected:
|
||||
friend uint32_t hashMurmur2A(const StringView& _data);
|
||||
|
||||
const char* m_ptr;
|
||||
uint32_t m_len;
|
||||
};
|
||||
|
||||
inline uint32_t hashMurmur2A(const StringView& _data)
|
||||
{
|
||||
return hashMurmur2A(_data.m_ptr, _data.m_len);
|
||||
}
|
||||
|
||||
inline uint32_t hashMurmur2A(const char* _data)
|
||||
{
|
||||
return hashMurmur2A(StringView(_data) );
|
||||
}
|
||||
|
||||
/// ASCII string
|
||||
template<bx::AllocatorI** AllocatorT>
|
||||
class StringT : public StringView
|
||||
{
|
||||
public:
|
||||
StringT()
|
||||
: StringView("", 0)
|
||||
{
|
||||
}
|
||||
|
||||
StringT(const StringT<AllocatorT>& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
}
|
||||
|
||||
StringT<AllocatorT>& operator=(const StringT<AllocatorT>& _rhs)
|
||||
{
|
||||
set(_rhs.m_ptr, _rhs.m_len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
StringT(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
set(_ptr, _len);
|
||||
}
|
||||
|
||||
StringT(const StringView& _rhs)
|
||||
{
|
||||
set(_rhs.getPtr(), _rhs.getLength() );
|
||||
}
|
||||
|
||||
~StringT()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void set(const char* _ptr, uint32_t _len = UINT32_MAX)
|
||||
{
|
||||
clear();
|
||||
|
||||
if (0 != _len)
|
||||
{
|
||||
uint32_t len = uint32_t(strnlen(_ptr, _len) );
|
||||
m_len = len;
|
||||
char* ptr = (char*)BX_ALLOC(*AllocatorT, len+1);
|
||||
|
||||
memcpy(ptr, _ptr, len);
|
||||
ptr[len] = '\0';
|
||||
|
||||
*const_cast<char**>(&m_ptr) = ptr;
|
||||
}
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
if (0 != m_len)
|
||||
{
|
||||
BX_FREE(*AllocatorT, const_cast<char*>(m_ptr) );
|
||||
|
||||
StringView::clear();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace bx
|
||||
|
||||
#endif // BX_STRING_H_HEADER_GUARD
|
||||
|
||||
Reference in New Issue
Block a user