Luna/libluna/include/luna/String.h
apio ef01f187c3
All checks were successful
continuous-integration/drone/push Build is passing
libluna: Add StringView
2023-03-29 17:43:10 +02:00

56 lines
925 B
C++

#pragma once
#include <luna/Result.h>
#include <luna/StringView.h>
class String
{
public:
String(char* c_str);
String(char* c_str, usize length);
String();
String(String&&);
String(const String&) = delete;
~String();
Result<String> clone() const;
Result<String> substring(usize begin, usize size) const;
static Result<String> from_cstring(const char* str);
const char* chars() const
{
return m_inline ? m_inline_storage : m_string;
}
usize length() const
{
return m_length;
}
bool is_empty() const
{
return m_length == 0;
}
StringView view() const
{
return { chars(), m_length };
}
const char& operator[](usize) const;
private:
union {
char* m_string { nullptr };
char m_inline_storage[sizeof(char*)];
};
bool m_inline { true };
usize m_length { 0 };
};