1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// clang-format off
// SPDX-FileCopyrightText: 2023 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
// clang-format on
// SPDX-FileContributor: Andrew Hayzen <andrew.hayzen@kdab.com>
//
// SPDX-License-Identifier: MIT OR Apache-2.0
#include "cxx-qt-lib/qstringlist.h"
#include <cxx-qt-lib/assertion_utils.h>
// The layout has changed between Qt 5 and Qt 6
//
// Qt5 QStringList has one pointer as a member
// https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/tools/qlist.h?h=v5.15.6-lts-lgpl#n157
//
// Qt6 QStringList has one member, which contains two pointers and a size_t
// https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/tools/qlist.h?h=v6.2.4#n110
// DataPointer is then a QArrayDataPointer<QString>
// https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/tools/qarraydatapointer.h?h=v6.2.4#n390
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
assert_alignment_and_size(QStringList, {
::std::size_t a0;
::std::size_t a1;
::std::size_t a2;
});
#else
assert_alignment_and_size(QStringList, { ::std::size_t a0; });
#endif
static_assert(!::std::is_trivially_copy_assignable<QStringList>::value);
static_assert(!::std::is_trivially_copy_constructible<QStringList>::value);
static_assert(!::std::is_trivially_destructible<QStringList>::value);
static_assert(QTypeInfo<QStringList>::isRelocatable);
namespace rust {
namespace cxxqtlib1 {
QStringList
qstringlistFromQListQString(const QList<QString>& list)
{
return QStringList(list);
}
QList<QString>
qstringlistAsQListQString(const QStringList& list)
{
// Cast to a QList then copy it
const auto list_cast = static_cast<QList<QString>>(list);
return QList<QString>(list_cast);
}
::rust::isize
qstringlistRemoveDuplicates(QStringList& list)
{
// Qt 5 has an int Qt 6 has a qsizetype
return static_cast<::rust::isize>(list.removeDuplicates());
}
}
}