Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qstringconverter_base.h
Go to the documentation of this file.
1
// Copyright (C) 2022 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:critical reason:data-parser
4
5
#
ifndef
QSTRINGCONVERTER_BASE_H
6
#
define
QSTRINGCONVERTER_BASE_H
7
8
#
if
0
9
// IWYU pragma: private, include "qstringconverter.h"
10
// QStringConverter(Base) class are handled in qstringconverter
11
#
pragma
qt_sync_stop_processing
12
#
endif
13
14
#
include
<
optional
>
15
16
#
include
<
QtCore
/
qglobal
.
h
>
// QT_{BEGIN,END}_NAMESPACE
17
#
include
<
QtCore
/
qflags
.
h
>
// Q_DECLARE_FLAGS
18
#
include
<
QtCore
/
qcontainerfwd
.
h
>
19
#
include
<
QtCore
/
qstringfwd
.
h
>
20
21
#
include
<
cstring
>
22
23
QT_BEGIN_NAMESPACE
24
25
class
QByteArrayView;
26
class
QChar;
27
class
QByteArrayView;
28
class
QStringView
;
29
30
#
if
QT_VERSION
<
QT_VERSION_CHECK
(
7
,
0
,
0
)
&&
!
defined
(
Q_QDOC
)
&&
!
defined
(
QT_BOOTSTRAPPED
)
31
class
QStringConverterBase
32
#
else
33
class
QStringConverter
34
#
endif
35
{
36
public
:
37
enum
class
Flag
{
38
Default
= 0,
39
Stateless
= 0x1,
40
ConvertInvalidToNull
= 0x2,
41
WriteBom
= 0x4,
42
ConvertInitialBom
= 0x8,
43
UsesIcu
= 0x10,
44
};
45
Q_DECLARE_FLAGS(Flags,
Flag
)
46
47
struct
State
{
48
constexpr
State
(Flags f =
Flag
::
Default
)
noexcept
49
:
flags
(
f
),
state_data
{0, 0, 0, 0} {}
50
~
State
() { clear(); }
51
52
State
(
State
&&other)
noexcept
53
:
flags
(
other
.
flags
),
54
remainingChars
(
other
.
remainingChars
),
55
invalidChars
(
other
.
invalidChars
),
56
state_data
{
other
.
state_data
[0],
other
.
state_data
[1],
57
other
.
state_data
[2],
other
.
state_data
[3]},
58
clearFn
(other
.
clearFn
)
59
{ other
.
clearFn
=
nullptr
; }
60
State
&
operator
=(
State
&&other)
noexcept
61
{
62
clear();
63
flags = other.flags;
64
remainingChars = other.remainingChars;
65
invalidChars = other.invalidChars;
66
std
::memmove(state_data, other.state_data,
sizeof
state_data);
// self-assignment-safe
67
clearFn
= other
.
clearFn
;
68
other
.
clearFn
=
nullptr
;
69
return
*
this
;
70
}
71
Q_CORE_EXPORT
void
clear
()
noexcept
;
72
Q_CORE_EXPORT
void
reset
()
noexcept
;
73
74
Flags
flags
;
75
int
internalState
= 0;
76
qsizetype
remainingChars
= 0;
77
qsizetype
invalidChars
= 0;
78
79
union
{
80
uint state_data[4];
81
void
*d[2];
82
};
83
using
ClearDataFn
=
void
(*)(
State
*)
noexcept
;
84
ClearDataFn
clearFn
=
nullptr
;
85
private
:
86
Q_DISABLE_COPY
(
State
)
87
};
88
89
#
if
QT_VERSION
<
QT_VERSION_CHECK
(
7
,
0
,
0
)
&&
!
defined
(
Q_QDOC
)
&&
!
defined
(
QT_BOOTSTRAPPED
)
90
protected
:
91
QStringConverterBase
() =
default
;
92
~
QStringConverterBase
() =
default
;
93
QStringConverterBase
(
QStringConverterBase
&&) =
default
;
94
QStringConverterBase
&
operator
=(
QStringConverterBase
&&) =
default
;
95
};
96
97
class
QStringConverter
:
public
QStringConverterBase
98
{
99
public
:
100
#
endif
// Qt 6 compat for QStringConverterBase
101
102
enum
Encoding
{
103
Utf8
,
104
#
ifndef
QT_BOOTSTRAPPED
105
Utf16
,
106
Utf16LE
,
107
Utf16BE
,
108
Utf32
,
109
Utf32LE
,
110
Utf32BE
,
111
#
endif
112
Latin1
= 7,
113
System
,
114
LastEncoding
=
System
115
};
116
117
protected
:
118
119
struct
Interface
120
{
121
using
DecoderFn
= QChar * (*)(QChar *out, QByteArrayView in,
State
*state);
122
using
LengthFn
=
qsizetype
(*)(
qsizetype
inLength
);
123
using
EncoderFn
=
char
* (*)(
char
*out,
QStringView
in,
State
*state);
124
const
char
*
name
=
nullptr
;
125
DecoderFn
toUtf16
=
nullptr
;
126
LengthFn
toUtf16Len
=
nullptr
;
127
EncoderFn
fromUtf16
=
nullptr
;
128
LengthFn
fromUtf16Len
=
nullptr
;
129
};
130
131
constexpr
QStringConverter
()
noexcept
132
:
iface
(
nullptr
)
133
{}
134
constexpr
explicit
QStringConverter
(
Encoding
encoding, Flags f)
135
:
iface
(&
encodingInterfaces
[
qsizetype
(
encoding
)]),
state
(
f
)
136
{}
137
constexpr
explicit
QStringConverter
(
const
Interface
*i)
noexcept
138
:
iface
(i)
139
{}
140
#
if
QT_CORE_REMOVED_SINCE
(
6
,
8
)
141
Q_CORE_EXPORT
explicit
QStringConverter
(
const
char
*
name
,
Flags
f
);
142
#
endif
143
Q_CORE_EXPORT
explicit
QStringConverter
(
QAnyStringView
name
,
Flags
f
);
144
145
146
~
QStringConverter
() =
default
;
147
148
public
:
149
QStringConverter
(
QStringConverter
&&) =
default
;
150
QStringConverter
&
operator
=(
QStringConverter
&&) =
default
;
151
152
bool
isValid
()
const
noexcept
{
return
iface
!=
nullptr
; }
153
154
void
resetState
()
noexcept
155
{
156
state.reset();
157
}
158
bool
hasError
()
const
noexcept
{
return
state.invalidChars != 0; }
159
160
Q_CORE_EXPORT
const
char
*
name
()
const
noexcept
;
161
162
#
if
QT_CORE_REMOVED_SINCE
(
6
,
8
)
163
Q_CORE_EXPORT
static
std
::
optional
<
Encoding
>
encodingForName
(
const
char
*
name
)
noexcept
;
164
#
endif
165
Q_CORE_EXPORT
static
std
::
optional
<
Encoding
>
encodingForName
(
QAnyStringView
name
)
noexcept
;
166
Q_DECL_PURE_FUNCTION Q_CORE_EXPORT
static
const
char
*
nameForEncoding
(
Encoding
e
)
noexcept
;
167
Q_CORE_EXPORT
static
std
::
optional
<
Encoding
>
168
encodingForData
(
QByteArrayView
data
,
char16_t
expectedFirstCharacter
= 0)
noexcept
;
169
Q_CORE_EXPORT
static
std
::
optional
<
Encoding
>
encodingForHtml
(
QByteArrayView
data
);
170
171
Q_CORE_EXPORT
static
QStringList
availableCodecs
();
172
173
174
enum
class
FinalizeResultError
:
quint8
{
175
NoError
,
176
InvalidCharacters
,
177
NotEnoughSpace
,
178
};
179
template
<
typename
Char>
180
struct
FinalizeResultChar
181
{
182
using
Error
=
FinalizeResultError
;
183
184
Char *
next
;
185
qint16
invalidChars
;
186
Error
error
;
187
};
188
189
protected
:
190
const
Interface
*
iface
;
191
State
state
;
192
private
:
193
Q_CORE_EXPORT
static
const
Interface
encodingInterfaces
[
Encoding
::
LastEncoding
+ 1];
194
};
195
196
Q_DECLARE_OPERATORS_FOR_FLAGS(
QStringConverter
::Flags)
197
198
QT_END_NAMESPACE
199
200
#
endif
QStringConverter
\inmodule QtCore
Definition
qstringconverter_base.h:35
QStringConverter::name
Q_CORE_EXPORT const char * name() const noexcept
Returns the canonical name of the encoding this QStringConverter can encode or decode.
Definition
qstringconverter.cpp:2434
QStringConverter::hasError
bool hasError() const noexcept
Returns true if a conversion could not correctly convert a character.
Definition
qstringconverter_base.h:158
QStringConverter::QStringConverter
constexpr QStringConverter(Encoding encoding, Flags f)
Definition
qstringconverter_base.h:134
QStringConverter::QStringConverter
QStringConverter(QStringConverter &&)=default
QStringConverter::Flag
Flag
\value Default Default conversion rules apply.
Definition
qstringconverter_base.h:37
QStringConverter::Flag::ConvertInvalidToNull
@ ConvertInvalidToNull
Definition
qstringconverter_base.h:40
QStringConverter::Flag::Stateless
@ Stateless
Definition
qstringconverter_base.h:39
QStringConverter::Flag::Default
@ Default
Definition
qstringconverter_base.h:38
QStringConverter::Flag::UsesIcu
@ UsesIcu
Definition
qstringconverter_base.h:43
QStringConverter::Flag::WriteBom
@ WriteBom
Definition
qstringconverter_base.h:41
QStringConverter::Flag::ConvertInitialBom
@ ConvertInitialBom
Definition
qstringconverter_base.h:42
QStringConverter::isValid
bool isValid() const noexcept
Returns true if this is a valid string converter that can be used for encoding or decoding text.
Definition
qstringconverter_base.h:152
QStringConverter::resetState
void resetState() noexcept
Resets the internal state of the converter, clearing potential errors or partial conversions.
Definition
qstringconverter_base.h:154
QStringConverter::~QStringConverter
~QStringConverter()=default
QStringConverter::Encoding
Encoding
\value Utf8 Create a converter to or from UTF-8 \value Utf16 Create a converter to or from UTF-16.
Definition
qstringconverter_base.h:102
QStringConverter::Latin1
@ Latin1
Definition
qstringconverter_base.h:112
QStringConverter::Utf8
@ Utf8
Definition
qstringconverter_base.h:103
QStringConverter::Utf32LE
@ Utf32LE
Definition
qstringconverter_base.h:109
QStringConverter::Utf16
@ Utf16
Definition
qstringconverter_base.h:105
QStringConverter::Utf16LE
@ Utf16LE
Definition
qstringconverter_base.h:106
QStringConverter::Utf32
@ Utf32
Definition
qstringconverter_base.h:108
QStringConverter::Utf32BE
@ Utf32BE
Definition
qstringconverter_base.h:110
QStringConverter::LastEncoding
@ LastEncoding
Definition
qstringconverter_base.h:114
QStringConverter::Utf16BE
@ Utf16BE
Definition
qstringconverter_base.h:107
QStringConverter::System
@ System
Definition
qstringconverter_base.h:113
QStringConverter::state
State state
Definition
qstringconverter_base.h:191
QStringConverter::QStringConverter
constexpr QStringConverter(const Interface *i) noexcept
Definition
qstringconverter_base.h:137
QStringConverter::operator=
QStringConverter & operator=(QStringConverter &&)=default
QStringConverter::FinalizeResultError
FinalizeResultError
\value NoError No error.
Definition
qstringconverter_base.h:174
QStringConverter::FinalizeResultError::NotEnoughSpace
@ NotEnoughSpace
Definition
qstringconverter_base.h:177
QStringConverter::FinalizeResultError::NoError
@ NoError
Definition
qstringconverter_base.h:175
QStringConverter::FinalizeResultError::InvalidCharacters
@ InvalidCharacters
Definition
qstringconverter_base.h:176
QStringConverter::iface
const Interface * iface
Definition
qstringconverter_base.h:190
QStringConverter::QStringConverter
constexpr QStringConverter() noexcept
Definition
qstringconverter_base.h:131
QStringView
\inmodule QtCore
Definition
qstringview.h:77
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
QStringConverter::FinalizeResultChar
\inmodule QtCore
Definition
qstringconverter_base.h:181
QStringConverter::FinalizeResultChar::Error
FinalizeResultError Error
Definition
qstringconverter_base.h:182
QStringConverter::FinalizeResultChar::invalidChars
qint16 invalidChars
Definition
qstringconverter_base.h:185
QStringConverter::FinalizeResultChar::next
Char * next
Definition
qstringconverter_base.h:184
QStringConverter::FinalizeResultChar::error
Error error
Definition
qstringconverter_base.h:186
QStringConverter::Interface
Definition
qstringconverter_base.h:120
QStringConverter::Interface::fromUtf16Len
LengthFn fromUtf16Len
Definition
qstringconverter_base.h:128
QStringConverter::Interface::fromUtf16
EncoderFn fromUtf16
Definition
qstringconverter_base.h:127
QStringConverter::Interface::toUtf16Len
LengthFn toUtf16Len
Definition
qstringconverter_base.h:126
QStringConverter::Interface::DecoderFn
QChar *(*)(QChar *out, QByteArrayView in, State *state) DecoderFn
Definition
qstringconverter_base.h:121
QStringConverter::Interface::name
const char * name
Definition
qstringconverter_base.h:124
QStringConverter::Interface::toUtf16
DecoderFn toUtf16
Definition
qstringconverter_base.h:125
QStringConverter::Interface::EncoderFn
char *(*)(char *out, QStringView in, State *state) EncoderFn
Definition
qstringconverter_base.h:123
QStringConverter::State
Definition
qstringconverter_base.h:47
QStringConverter::State::internalState
int internalState
Definition
qstringconverter_base.h:75
QStringConverter::State::State
State(State &&other) noexcept
Definition
qstringconverter_base.h:52
QStringConverter::State::invalidChars
qsizetype invalidChars
Definition
qstringconverter_base.h:77
QStringConverter::State::remainingChars
qsizetype remainingChars
Definition
qstringconverter_base.h:76
QStringConverter::State::flags
Flags flags
Definition
qstringconverter_base.h:74
QStringConverter::State::State
constexpr State(Flags f=Flag::Default) noexcept
Definition
qstringconverter_base.h:48
QStringConverter::State::ClearDataFn
void(*)(State *) noexcept ClearDataFn
Definition
qstringconverter_base.h:83
QStringConverter::State::operator=
State & operator=(State &&other) noexcept
Definition
qstringconverter_base.h:60
QStringConverter::State::~State
~State()
Definition
qstringconverter_base.h:50
QStringConverter::State::reset
Q_CORE_EXPORT void reset() noexcept
Definition
qstringconverter.cpp:1828
QStringConverter::State::clear
Q_CORE_EXPORT void clear() noexcept
Definition
qstringconverter.cpp:1817
QStringConverter::State::clearFn
ClearDataFn clearFn
Definition
qstringconverter_base.h:84
qtbase
src
corelib
text
qstringconverter_base.h
Generated on
for Qt by
1.18.0