1#ifndef SDL3PP_STRINGS_H_
2#define SDL3PP_STRINGS_H_
8#include <SDL3/SDL_assert.h>
9#include <SDL3/SDL_stdinc.h>
10#include "SDL3pp_ownPtr.h"
22#ifndef SDL3PP_ENABLE_STRING_PARAM
24#ifndef SDL3PP_DISABLE_STRING_PARAM
29#define SDL3PP_ENABLE_STRING_PARAM
34#ifdef SDL3PP_ENABLE_STRING_PARAM
36#ifndef SDL3PP_DISABLE_STRING_PARAM_STRING_VIEW_BUFFERING
38#ifndef SDL3PP_STRING_PARAM_STRING_VIEW_BUFFERING_COUNT
41#define SDL3PP_STRING_PARAM_STRING_VIEW_BUFFERING_COUNT 32
99 : m_data(wrapStringView(str))
109 constexpr const char*
c_str()
const {
return m_data; }
117 constexpr operator const char*()
const {
return m_data; }
122 static const char* wrapStringView(std::string_view str)
124 if (str.empty())
return "";
126#ifdef SDL3PP_DISABLE_STRING_PARAM_STRING_VIEW_BUFFERING
131 if (str.data()[str.size()] == 0)
return str.data();
133 constexpr size_t bufferCount =
135 static thread_local std::string buffer[bufferCount];
136 static thread_local size_t bufferIndex = 0;
137 buffer[bufferIndex] = str;
138 auto cstr = buffer[bufferIndex].c_str();
139 bufferIndex = (bufferIndex + 1) % bufferCount;
168 :
OwnArray(other.release(), other.size())
175 : SDL_strndup(other.
data(), other.
size()))
186 constexpr operator std::string_view()
const
188 return std::string_view{
data(),
size()};
196 }
else if (!other.empty()) {
197 size_t lhsSz =
size();
198 size_t rhsSz = other.size();
199 size_t finalSize = lhsSz + lhsSz + 1;
200 auto newBuf =
static_cast<char*
>(SDL_realloc(
data(), finalSize));
202 SDL_memcpy(newBuf, other.data(), rhsSz);
205 reset(newBuf, finalSize - 1);
213 return (*
this) += std::string_view{&ch, 1};
226 return lhs + std::string_view{&rhs, 1};
235 if (
empty())
return "";
266 template<
class T,
size_t N>
287 template<
class T,
size_t N>
307 constexpr size_t size()
const {
return m_size_bytes; }
313 constexpr const char*
data()
const
315 return static_cast<const char*
>(m_data);
322 return static_cast<const T*
>(m_data);
333 void* m_data =
nullptr;
334 size_t m_size_bytes = 0;
359 template<
class T,
size_t N>
362 static_assert(
false,
"Non-const type is required");
371 template<
class T,
size_t N>
392 template<
class T,
size_t N>
412 constexpr size_t size()
const {
return m_size_bytes; }
418 constexpr char*
data()
const {
return static_cast<char*
>(m_data); }
424 return static_cast<T*
>(m_data);
char * release()
Definition SDL3pp_ownPtr.h:91
void reset(char *newValue=nullptr)
Definition SDL3pp_ownPtr.h:99
constexpr bool empty() const
Definition SDL3pp_ownPtr.h:74
constexpr char * data()
Definition SDL3pp_ownPtr.h:77
constexpr size_t size() const
Definition SDL3pp_ownPtr.h:83
constexpr OwnArray(std::nullptr_t=nullptr)
Constructor.
Definition SDL3pp_ownPtr.h:50
constexpr SourceBytes(std::span< T, N > span)
From span.
Definition SDL3pp_strings.h:267
constexpr SourceBytes(const T &data)
From container-like.
Definition SDL3pp_strings.h:278
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:310
constexpr SourceBytes(std::nullptr_t)
Disambiguate between multiple pointer types.
Definition SDL3pp_strings.h:255
constexpr SourceBytes(const void *data, size_t size_bytes)
From data + size in bytes.
Definition SDL3pp_strings.h:300
constexpr size_t size() const
Retrieves contained size.
Definition SDL3pp_strings.h:307
constexpr SourceBytes()=default
Default ctor.
constexpr SourceBytes(T(&data)[N])
From array.
Definition SDL3pp_strings.h:288
constexpr const char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:313
constexpr const T * data_as() const
Retrieves contained data.
Definition SDL3pp_strings.h:320
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:58
constexpr const char * c_str() const
Converts to a null terminated C string.
Definition SDL3pp_strings.h:109
constexpr StringParam(const char *str="")
Constructs from a C string.
Definition SDL3pp_strings.h:69
StringParam(std::string_view str)
Constructs from std::string_view object.
Definition SDL3pp_strings.h:98
StringParam(const std::string &str)
Constructs from std::string reference.
Definition SDL3pp_strings.h:84
constexpr TargetBytes & operator=(TargetBytes &&other)=default
Move assignment.
constexpr TargetBytes(T &data)
From container-like.
Definition SDL3pp_strings.h:383
constexpr TargetBytes(std::span< T, N > span)
From span.
Definition SDL3pp_strings.h:372
constexpr TargetBytes(TargetBytes &&other)=default
Move constructor.
constexpr TargetBytes()=default
Default ctor.
constexpr char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:418
constexpr TargetBytes(std::nullptr_t)
Disambiguate between multiple pointer types.
Definition SDL3pp_strings.h:341
constexpr TargetBytes(T(&data)[N])
From array.
Definition SDL3pp_strings.h:393
constexpr TargetBytes(std::span< const T, N >)
Just to have better error message.
Definition SDL3pp_strings.h:360
constexpr TargetBytes(const TargetBytes &other)=default
Copy constructor.
constexpr T * data_as() const
Retrieves contained data.
Definition SDL3pp_strings.h:422
constexpr size_t size() const
Retrieves contained size.
Definition SDL3pp_strings.h:412
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:415
constexpr TargetBytes(void *data, size_t size_bytes)
From data + size in bytes.
Definition SDL3pp_strings.h:405
constexpr TargetBytes & operator=(const TargetBytes &other)=default
Copy assignment.
#define SDL_assert(condition)
An assertion test that is normally performed only in debug builds.
Definition SDL3pp_assert.h:321
#define SDL3PP_STRING_PARAM_STRING_VIEW_BUFFERING_COUNT
The number of buffers used to store string views on StringParam.
Definition SDL3pp_strings.h:41
Main include header for the SDL3pp library.
friend StringResult operator+(StringResult lhs, std::string_view rhs)
Append string.
Definition SDL3pp_strings.h:217
StringResult(std::string_view other)
Constructs from string view.
Definition SDL3pp_strings.h:173
constexpr StringResult(StringResult &&other) noexcept
Move ctor.
Definition SDL3pp_strings.h:167
const char * c_str() const
Convert to c-string.
Definition SDL3pp_strings.h:233
friend StringResult operator+(const StringResult &lhs, char rhs)
Append char.
Definition SDL3pp_strings.h:224
StringResult & operator+=(std::string_view other)
Append string.
Definition SDL3pp_strings.h:192
std::string str() const
Convert to string.
Definition SDL3pp_strings.h:230
StringResult(const StringResult &other)
Copy ctor.
Definition SDL3pp_strings.h:161
~StringResult()
Dtor.
Definition SDL3pp_strings.h:180
StringResult & operator+=(char ch)
Append char.
Definition SDL3pp_strings.h:211
constexpr OwnArray(std::nullptr_t=nullptr)
Use parent ctors.
Definition SDL3pp_ownPtr.h:50
constexpr operator std::string_view() const
Convert to std::string_view.
Definition SDL3pp_strings.h:186