1#ifndef SDL3PP_STRINGS_H_
2#define SDL3PP_STRINGS_H_
8#include <SDL3/SDL_stdinc.h>
9#include "SDL3pp_ownPtr.h"
21#ifndef SDL3PP_ENABLE_STRING_PARAM
23#ifndef SDL3PP_DISABLE_STRING_PARAM
24#define SDL3PP_ENABLE_STRING_PARAM
29#ifdef SDL3PP_ENABLE_STRING_PARAM
44 std::variant<const char*, std::string> data;
85 : data(std::move(str))
122 const char* operator()(
const char* a)
const {
return a; }
123 const char* operator()(
const std::string& s)
const {
return s.c_str(); }
125 return std::visit(Visitor{}, data);
134 operator const char*()
const {
return c_str(); }
139using StringParam =
const char*;
159 :
OwnArray(other.release(), other.size())
166 : SDL_strndup(other.
data(), other.
size()))
177 constexpr operator std::string_view()
const
179 return std::string_view{
data(),
size()};
187 }
else if (!other.empty()) {
188 size_t lhsSz =
size();
189 size_t rhsSz = other.size();
190 size_t finalSize = lhsSz + lhsSz + 1;
191 auto newBuf =
static_cast<char*
>(SDL_realloc(
data(), finalSize));
193 SDL_memcpy(newBuf, other.data(), rhsSz);
196 reset(newBuf, finalSize - 1);
204 return (*
this) += std::string_view{&ch, 1};
217 return lhs + std::string_view{&rhs, 1};
226 if (
empty())
return "";
257 template<
class T,
size_t N>
278 template<
class T,
size_t N>
298 constexpr size_t size()
const {
return m_size_bytes; }
304 constexpr const char*
data()
const
306 return static_cast<const char*
>(m_data);
313 return static_cast<const T*
>(m_data);
324 void* m_data =
nullptr;
325 size_t m_size_bytes = 0;
350 template<
class T,
size_t N>
353 static_assert(
false,
"Non-const type is required");
362 template<
class T,
size_t N>
383 template<
class T,
size_t N>
403 constexpr size_t size()
const {
return m_size_bytes; }
409 constexpr char*
data()
const {
return static_cast<char*
>(m_data); }
415 return static_cast<T*
>(m_data);
constexpr bool empty() const
Definition SDL3pp_ownPtr.h:74
char * release()
Definition SDL3pp_ownPtr.h:91
constexpr OwnArray(std::nullptr_t=nullptr)
Constructor.
Definition SDL3pp_ownPtr.h:50
void reset(char *newValue=nullptr)
Definition SDL3pp_ownPtr.h:99
constexpr size_t size() const
Definition SDL3pp_ownPtr.h:83
constexpr char * data()
Definition SDL3pp_ownPtr.h:77
constexpr SourceBytes(std::span< T, N > span)
From span.
Definition SDL3pp_strings.h:258
constexpr SourceBytes(const T &data)
From container-like.
Definition SDL3pp_strings.h:269
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:301
constexpr SourceBytes(std::nullptr_t)
Disambiguate between multiple pointer types.
Definition SDL3pp_strings.h:246
constexpr SourceBytes(const void *data, size_t size_bytes)
From data + size in bytes.
Definition SDL3pp_strings.h:291
constexpr size_t size() const
Retrieves contained size.
Definition SDL3pp_strings.h:298
constexpr SourceBytes()=default
Default ctor.
constexpr SourceBytes(T(&data)[N])
From array.
Definition SDL3pp_strings.h:279
constexpr const char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:304
constexpr const T * data_as() const
Retrieves contained data.
Definition SDL3pp_strings.h:311
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:43
StringParam & operator=(StringParam &&)=default
Move assignment.
StringParam(const char *str="")
Constructs from a C string.
Definition SDL3pp_strings.h:56
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:71
const char * c_str() const
Converts to a null terminated C string.
Definition SDL3pp_strings.h:118
StringParam(std::string &&str)
Constructs from std::string object.
Definition SDL3pp_strings.h:84
StringParam(StringParam &&)=default
Move ctor.
constexpr TargetBytes & operator=(TargetBytes &&other)=default
Move assignment.
constexpr TargetBytes(T &data)
From container-like.
Definition SDL3pp_strings.h:374
constexpr TargetBytes(std::span< T, N > span)
From span.
Definition SDL3pp_strings.h:363
constexpr TargetBytes(TargetBytes &&other)=default
Move constructor.
constexpr TargetBytes()=default
Default ctor.
constexpr char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:409
constexpr TargetBytes(std::nullptr_t)
Disambiguate between multiple pointer types.
Definition SDL3pp_strings.h:332
constexpr TargetBytes(T(&data)[N])
From array.
Definition SDL3pp_strings.h:384
constexpr TargetBytes(std::span< const T, N >)
Just to have better error message.
Definition SDL3pp_strings.h:351
constexpr TargetBytes(const TargetBytes &other)=default
Copy constructor.
constexpr T * data_as() const
Retrieves contained data.
Definition SDL3pp_strings.h:413
constexpr size_t size() const
Retrieves contained size.
Definition SDL3pp_strings.h:403
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:406
constexpr TargetBytes(void *data, size_t size_bytes)
From data + size in bytes.
Definition SDL3pp_strings.h:396
constexpr TargetBytes & operator=(const TargetBytes &other)=default
Copy assignment.
Main include header for the SDL3pp library.
friend StringResult operator+(StringResult lhs, std::string_view rhs)
Append string.
Definition SDL3pp_strings.h:208
StringResult(std::string_view other)
Constructs from string view.
Definition SDL3pp_strings.h:164
constexpr StringResult(StringResult &&other) noexcept
Move ctor.
Definition SDL3pp_strings.h:158
const char * c_str() const
Convert to c-string.
Definition SDL3pp_strings.h:224
constexpr OwnArray(std::nullptr_t=nullptr)
Use parent ctors.
Definition SDL3pp_ownPtr.h:50
friend StringResult operator+(const StringResult &lhs, char rhs)
Append char.
Definition SDL3pp_strings.h:215
StringResult & operator+=(std::string_view other)
Append string.
Definition SDL3pp_strings.h:183
std::string str() const
Convert to string.
Definition SDL3pp_strings.h:221
StringResult(const StringResult &other)
Copy ctor.
Definition SDL3pp_strings.h:152
~StringResult()
Dtor.
Definition SDL3pp_strings.h:171
StringResult & operator+=(char ch)
Append char.
Definition SDL3pp_strings.h:202
constexpr operator std::string_view() const
Convert to std::string_view.
Definition SDL3pp_strings.h:177