Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
StringConverter.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Strings/StringView.h"
5
6namespace SC
7{
8struct Buffer;
9struct SC_COMPILER_EXPORT StringConverter;
10struct String;
11} // namespace SC
12
15
24{
31
38 [[nodiscard]] static bool convertEncodingToUTF8(StringSpan text, Buffer& buffer, StringSpan* encodedText = nullptr,
39 NullTermination nullTerminate = AddZeroTerminator);
40
47 [[nodiscard]] static bool convertEncodingToUTF16(StringSpan text, Buffer& buffer, StringSpan* encodedText = nullptr,
48 NullTermination nullTerminate = AddZeroTerminator);
49
57 [[nodiscard]] static bool convertEncodingTo(StringEncoding encoding, StringSpan text, Buffer& buffer,
58 StringSpan* encodedText = nullptr,
59 NullTermination nullTerminate = AddZeroTerminator);
60
62 enum Flags
63 {
66 };
67
72
76 StringConverter(Buffer& text, StringEncoding encoding);
77
83 [[nodiscard]] bool convertNullTerminateFastPath(StringSpan input, StringSpan& encodedText);
84
90 [[nodiscard]] bool appendNullTerminated(StringSpan input, bool popExistingNullTerminator = true);
91
92 private:
97 [[nodiscard]] static bool popNullTermIfNotEmpty(Buffer& stringData, StringEncoding encoding);
98
103 [[nodiscard]] static bool pushNullTerm(Buffer& stringData, StringEncoding encoding);
104
108 static void ensureZeroTermination(Buffer& data, StringEncoding encoding);
109
110 void internalClear();
111 // TODO: FileSystemIterator should just use a Buffer
112 friend struct FileSystemIterator;
113 friend struct String;
114 template <int N>
115 friend struct SmallString;
116 friend struct StringBuilder;
117 friend struct File;
118
119 [[nodiscard]] bool setTextLengthInBytesIncludingTerminator(size_t newDataSize);
120 [[nodiscard]] static bool convertSameEncoding(StringSpan text, Buffer& buffer, StringSpan* encodedText,
121 NullTermination terminate);
122 static void eventuallyNullTerminate(Buffer& buffer, StringEncoding destinationEncoding, StringSpan* encodedText,
123 NullTermination terminate);
124
125 StringEncoding encoding;
126 Buffer& data;
127 // Appends the input string null terminated
128 [[nodiscard]] bool internalAppend(StringSpan input, StringSpan* encodedText);
129
130 // Fallbacks for platforms without an API to do the conversion out of the box (Linux)
131 [[nodiscard]] static bool convertUTF16LE_to_UTF8(const StringSpan sourceUtf16, Buffer& destination,
132 int& writtenCodeUnits);
133 [[nodiscard]] static bool convertUTF8_to_UTF16LE(const StringSpan sourceUtf8, Buffer& destination,
134 int& writtenCodeUnits);
135};
#define SC_COMPILER_EXPORT
Macro for symbol visibility in non-MSVC compilers.
Definition Compiler.h:78
An heap allocated byte buffer that can optionally use an inline buffer.
Definition Buffer.h:29
Iterates files and directories inside a given path without allocating any memory.
Definition FileSystemIterator.h:34
String with compile time configurable inline storage (small string optimization)
Definition StringFormat.h:12
Builds String out of a sequence of StringView or formatting through StringFormat.
Definition StringBuilder.h:16
Converts String to a different encoding (UTF8, UTF16).
Definition StringConverter.h:24
static bool convertEncodingToUTF16(StringSpan text, Buffer &buffer, StringSpan *encodedText=nullptr, NullTermination nullTerminate=AddZeroTerminator)
Converts text to (eventually null terminated) UTF16 encoding.
StringConverter(Buffer &text, StringEncoding encoding)
Create a StringBuilder that will push to given Vector, with specific encoding.
bool convertNullTerminateFastPath(StringSpan input, StringSpan &encodedText)
Converts a given input StringSpan to null-terminated version.
NullTermination
Specifies if to add a null terminator.
Definition StringConverter.h:27
@ DoNotAddZeroTerminator
A null terminator will NOT be added at the end of the String.
Definition StringConverter.h:29
@ AddZeroTerminator
A null terminator will be added at the end of the String.
Definition StringConverter.h:28
Flags
Clearing flags used when initializing destination buffer.
Definition StringConverter.h:63
@ Clear
Destination buffer will be cleared before pushing to it.
Definition StringConverter.h:64
@ DoNotClear
Destination buffer will not be cleared before pushing to it.
Definition StringConverter.h:65
static bool convertEncodingToUTF8(StringSpan text, Buffer &buffer, StringSpan *encodedText=nullptr, NullTermination nullTerminate=AddZeroTerminator)
Converts text to (eventually null terminated) UTF8 encoding.
static bool convertEncodingTo(StringEncoding encoding, StringSpan text, Buffer &buffer, StringSpan *encodedText=nullptr, NullTermination nullTerminate=AddZeroTerminator)
Converts text to (eventually null terminated) requested encoding.
bool appendNullTerminated(StringSpan input, bool popExistingNullTerminator=true)
Appends the given StringSpan and adds null-terminator.
StringConverter(String &text, Flags flags=DoNotClear)
Create a StringBuilder that will push to given String.
An read-only view over a string (to avoid including Strings library when parsing is not needed).
Definition StringSpan.h:31
A non-modifiable owning string with associated encoding.
Definition String.h:29