ALib C++ Framework
by
Library Version: 2605 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
chartraits_qt.hpp
Go to the documentation of this file.
1//==================================================================================================
2/// \file
3/// This header-file is part of the \aliblong.
4///
5/// Copyright 2013-2026 A-Worx GmbH, Germany.
6/// Published under #"mainpage_license".
7///
8/// <b>Legal Notice:</b>
9/// This is an optional extension header to provide compatibility between ALib and
10/// the QT class library.
11/// All information about QT is found at https://www.qt.io
12/// ALib otherwise does not use or rely on QT.
13/// The use of QT is bound to the QT license restrictions.
14//==================================================================================================
15namespace alib::characters {
16
17// Faking all template specializations of namespace strings for doxygen into namespace
18// strings::custom to keep the documentation of namespace string clean!
19#if DOXYGEN
20namespace compatibility {
21/// Specializations of type traits #"ArrayTraits" and
22/// #"ZTArrayTraits" for types found in the
23/// \https{QT Class Library,www.qt.io}.
24namespace qt {} }
25
26#else
27
28#define ALIB_QTCHAR alib::characters::TypeBySize<2>
29#define ALIB_QTCHAR_4 alib::characters::TypeBySize<4>
30
31// QStringView
32template<> struct ArrayTraits<QStringView, ALIB_QTCHAR> {
33 static constexpr Policy Access = Policy::Implicit;
34 static constexpr Policy Construction = Policy::Implicit;
35 static const ALIB_QTCHAR* Buffer (QStringView const & src) { return reinterpret_cast<const ALIB_QTCHAR*>(src.data()); }
36 static integer Length (QStringView const & src) { return integer(src.size()); }
37 static QStringView Construct(const ALIB_QTCHAR* b, integer l ) { return QStringView( b, qsizetype(l) ); }
38};
39
40template<> struct ZTArrayTraits<QStringView, ALIB_QTCHAR> {
41 static constexpr Policy Access = Policy::ExplicitOnly;
42 static constexpr Policy Construction = Policy::Implicit;
43 static const ALIB_QTCHAR* Buffer (QStringView const & src) { return reinterpret_cast<const ALIB_QTCHAR*>(src.data()); }
44 static integer Length (QStringView const & src) { return integer(src.size()); }
45 static QStringView Construct(const ALIB_QTCHAR* b, integer l ) { return QStringView( b, qsizetype(l) ); }
46};
47
48// QString
49template<> struct ArrayTraits<QString, ALIB_QTCHAR > {
50 static constexpr Policy Access = Policy::Implicit;
51 static constexpr Policy Construction = Policy::ExplicitOnly;
52 static const ALIB_QTCHAR* Buffer (QString const & src) { return reinterpret_cast<const ALIB_QTCHAR*>(src.data()); }
53 static integer Length (QString const & src) { return integer(src.size()); }
54 static QString Construct(const ALIB_QTCHAR* b, integer l ) { return QString( reinterpret_cast<const QChar*>(b), int(l) ); }
55};
56
57template<> struct ZTArrayTraits<QString, ALIB_QTCHAR> {
58 static constexpr Policy Access = Policy::Implicit;
59 static constexpr Policy Construction = Policy::ExplicitOnly;
60 static const ALIB_QTCHAR* Buffer (QString const & src) { return reinterpret_cast<const ALIB_QTCHAR*>(src.utf16()); }
61 static integer Length (QString const & src) { return integer(src.size() ); }
62 static QString Construct(const ALIB_QTCHAR* b, integer l ) { return QString( reinterpret_cast<const QChar*>(b), int(l) ); }
63};
64
65// QLatin1String
66template<> struct ArrayTraits<QLatin1String, nchar> {
67 static constexpr Policy Access = Policy::Implicit;
68 static constexpr Policy Construction = Policy::Implicit;
69 static const nchar* Buffer (QLatin1String const & src) { return src.data(); }
70 static integer Length (QLatin1String const & src) { return integer(src.size()); }
71 static QLatin1String Construct(const nchar* b, integer l ) { return QLatin1String( b, int(l) ); }
72};
73
74template<> struct ZTArrayTraits<QLatin1String, nchar> {
75 static constexpr Policy Access = Policy::ExplicitOnly;
76 static constexpr Policy Construction = Policy::Implicit;
77 static const nchar* Buffer (QLatin1String const & src) { return reinterpret_cast<const nchar*>(src.data()); }
78 static integer Length (QLatin1String const & src) { return integer(src.size()); }
79 static QLatin1String Construct(const nchar* b, integer l ) { return QLatin1String( b, int(l) ); }
80};
81
82// QByteArray
83template<> struct ArrayTraits<QByteArray, nchar> {
84 static constexpr Policy Access = Policy::Implicit;
85 static constexpr Policy Construction = Policy::ExplicitOnly;
86 static const nchar* Buffer (QByteArray const & src) { return src.data(); }
87 static integer Length (QByteArray const & src) { return integer(src.size()); }
88 static QByteArray Construct(const nchar* b, integer l ) { return QByteArray( b, int(l) ); }
89};
90
91template<> struct ZTArrayTraits<QByteArray, nchar> {
92 static constexpr Policy Access = Policy::ExplicitOnly;
93 static constexpr Policy Construction = Policy::ExplicitOnly;
94 static const nchar* Buffer (QByteArray const & src) { return reinterpret_cast<const nchar*>(src.data()); }
95 static integer Length (QByteArray const & src) { return integer(src.size()); }
96 static QByteArray Construct(const nchar* b, integer l ) { return QByteArray( b, int(l) ); }
97};
98
99// QVector<uint>
100template<> struct ArrayTraits<QVector<uint>, ALIB_QTCHAR_4> {
101 static constexpr Policy Access = Policy::Implicit;
102 static constexpr Policy Construction = Policy::ExplicitOnly;
103 static const ALIB_QTCHAR_4* Buffer (QVector<uint> const & src) { return reinterpret_cast<const ALIB_QTCHAR_4*>(src.data()); }
104 static integer Length (QVector<uint> const & src) { return integer(src.size()); }
105 static QVector<uint> Construct(const ALIB_QTCHAR_4* b, integer l ) {
106 QVector<uint> result;
107 result.reserve( int(l) );
108 const ALIB_QTCHAR_4* end= b + l;
109 while( b < end )
110 result.append( uint( *b++ ) );
111 return result;
112 }
113};
114
115template<> struct ZTArrayTraits<QVector<uint>, ALIB_QTCHAR_4> {
116 static constexpr Policy Access = Policy::ExplicitOnly;
117 static constexpr Policy Construction = Policy::ExplicitOnly;
118 static const ALIB_QTCHAR_4* Buffer (QVector<uint> const & src) { return reinterpret_cast<const ALIB_QTCHAR_4*>(src.data()); }
119 static integer Length (QVector<uint> const & src) { return integer(src.size() ); }
120 static QVector<uint> Construct(const ALIB_QTCHAR_4* b, integer l ) {
121 QVector<uint> result;
122 result.reserve( int(l) );
123 const ALIB_QTCHAR_4* end= b + l;
124 while( b < end )
125 result.append( uint(*b++) );
126 return result;
127 }
128};
129
130#endif //DOXYGEN
131
132} // namespace [alib::characters]
lang::integer integer
Type alias in namespace #"%alib".
Definition integers.hpp:149
static constexpr Policy Access
static integer Length(const TStringSource &src)
static TStringSource Construct(const TChar *array, integer length)
static constexpr Policy Construction
static const TChar * Buffer(const TStringSource &src)
static constexpr Policy Construction
static constexpr Policy Access
static const TChar * Buffer(const TStringSource &src)
static TStringSource Construct(const TChar *array, integer length)
static integer Length(const TStringSource &src)