21 , m_const_str(str ? str :
"")
22 , m_length(str ? ecs_os_strlen(str) : 0) { }
34 string(
string&& str)
noexcept {
37 m_const_str = str.m_const_str;
38 m_length = str.m_length;
42 operator const char*()
const {
46 string& operator=(
string&& str)
noexcept {
49 m_const_str = str.m_const_str;
50 m_length = str.m_length;
56 string& operator=(
const string& str) =
delete;
57 string(
const string& str) =
delete;
60 if (str.m_const_str == m_const_str) {
64 if (!m_const_str || !str.m_const_str) {
68 if (str.m_length != m_length) {
72 return ecs_os_strcmp(str, m_const_str) == 0;
76 return !(*
this == str);
79 bool operator==(
const char *str)
const {
80 if (m_const_str == str) {
84 if (!m_const_str || !str) {
88 return ecs_os_strcmp(str, m_const_str) == 0;
91 bool operator!=(
const char *str)
const {
92 return !(*
this == str);
95 const char* c_str()
const {
99 std::size_t length()
const {
100 return static_cast<std::size_t
>(m_length);
104 static constexpr size_t length(
char const (&)[N] ) {
108 std::size_t size()
const {
115 m_const_str =
nullptr;
118 bool contains(
const char *substr) {
120 return strstr(m_const_str, substr) !=
nullptr;
134 , m_const_str(str ? str :
"")
135 , m_length(str ? ecs_os_strlen(str) : 0) { }
137 char *m_str =
nullptr;
138 const char *m_const_str;