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;
91 : data(std::move(str))
128 const char* operator()(
const char* a)
const {
return a; }
129 const char* operator()(
const std::string& s)
const {
return s.c_str(); }
131 return std::visit(Visitor{}, data);
140 constexpr operator const char*()
const {
return c_str(); }
145using StringParam =
const char*;
156 using OwnArray::OwnArray;
173 : SDL_strndup(other.
data(), other.
size()))
178 constexpr operator StringParam()
const {
return std::string_view{*
this}; }
181 constexpr operator std::string_view()
const
183 return std::string_view{
data(),
size()};
191 }
else if (!other.empty()) {
192 size_t lhsSz =
size();
193 size_t rhsSz = other.size();
194 size_t finalSize = lhsSz + lhsSz + 1;
195 auto newBuf =
static_cast<char*
>(SDL_realloc(
data(), finalSize));
197 SDL_memcpy(newBuf, other.data(), rhsSz);
200 reset(newBuf, finalSize - 1);
208 return (*
this) += std::string_view{&ch, 1};
228 if (
empty())
return "";
258 template<
class T,
size_t N>
279 template<
class T,
size_t N>
319 template<
class T,
size_t N>
322 static_assert(
false,
"Non-const type is required");
331 template<
class T,
size_t N>
352 template<
class T,
size_t N>
Base class for SDL memory allocated array wrap.
Definition SDL3pp_ownPtr.h:43
constexpr bool empty() const
True if size() == 0.
Definition SDL3pp_ownPtr.h:70
char * release()
Release control on object.
Definition SDL3pp_ownPtr.h:87
void reset(char *newValue=nullptr)
Reset object.
Definition SDL3pp_ownPtr.h:95
constexpr size_t size() const
Size.
Definition SDL3pp_ownPtr.h:79
constexpr char * data()
Data.
Definition SDL3pp_ownPtr.h:73
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:43
constexpr const char * c_str() const
Converts to a null terminated C string.
Definition SDL3pp_strings.h:124
StringParam & operator=(StringParam &&)=default
Move assignment.
constexpr StringParam(const char *str)
Constructs from a C string.
Definition SDL3pp_strings.h:62
StringParam(std::string_view str)
Constructs from std::string_view object.
Definition SDL3pp_strings.h:104
constexpr StringParam(std::string &&str)
Constructs from std::string object.
Definition SDL3pp_strings.h:90
constexpr StringParam(const std::string &str)
Constructs from std::string reference.
Definition SDL3pp_strings.h:77
StringParam(StringParam &&)=default
Move ctor.
constexpr StringParam(std::nullptr_t=nullptr)
Default ctor.
Definition SDL3pp_strings.h:48
the main namespace where all SDL3pp public functions and types live
Definition SDL3pp_assert.h:7
Source byte stream.
Definition SDL3pp_strings.h:239
constexpr SourceBytes(std::span< T, N > span)
From span.
Definition SDL3pp_strings.h:259
constexpr SourceBytes(const T &data)
From container-like.
Definition SDL3pp_strings.h:270
constexpr SourceBytes(std::nullptr_t)
Disambiguate between multiple pointer types.
Definition SDL3pp_strings.h:247
size_t size_bytes
The size in bytes.
Definition SDL3pp_strings.h:241
constexpr SourceBytes(const void *data, size_t size_bytes)
From data + size in bytes.
Definition SDL3pp_strings.h:292
constexpr SourceBytes()=default
Default ctor.
constexpr SourceBytes(T(&data)[N])
From array.
Definition SDL3pp_strings.h:280
const void * data
The data copied from.
Definition SDL3pp_strings.h:240
A simple std::string-like interface for SDL allocated strings.
Definition SDL3pp_strings.h:153
StringResult(std::string_view other)
Constructs from string view.
Definition SDL3pp_strings.h:171
const char * c_str() const
Convert to c-string.
Definition SDL3pp_strings.h:226
constexpr StringResult(StringResult &&other)
Move ctor.
Definition SDL3pp_strings.h:165
StringResult & operator+=(std::string_view other)
Append string.
Definition SDL3pp_strings.h:187
std::string str() const
Convert to string.
Definition SDL3pp_strings.h:223
StringResult(const StringResult &other)
Copy ctor.
Definition SDL3pp_strings.h:159
StringResult operator+(std::string_view other) const
Append string.
Definition SDL3pp_strings.h:212
StringResult & operator+=(char ch)
Append char.
Definition SDL3pp_strings.h:206
StringResult operator+(char ch)
Append char.
Definition SDL3pp_strings.h:220
constexpr operator std::string_view() const
Convert to std::string_view.
Definition SDL3pp_strings.h:181
Target byte stream.
Definition SDL3pp_strings.h:305
constexpr TargetBytes(T &data)
From container-like.
Definition SDL3pp_strings.h:343
constexpr TargetBytes(std::span< T, N > span)
From span.
Definition SDL3pp_strings.h:332
constexpr TargetBytes()=default
Default ctor.
constexpr TargetBytes(std::nullptr_t)
Disambiguate between multiple pointer types.
Definition SDL3pp_strings.h:313
constexpr TargetBytes(T(&data)[N])
From array.
Definition SDL3pp_strings.h:353
size_t size_bytes
The size in bytes.
Definition SDL3pp_strings.h:307
void * data
The address to have data copied to it.
Definition SDL3pp_strings.h:306
constexpr TargetBytes(void *data, size_t size_bytes)
From data + size in bytes.
Definition SDL3pp_strings.h:365
constexpr TargetBytes(std::span< const T, N > span)
Just to have better error message.
Definition SDL3pp_strings.h:320