1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2018 Intel Corporation. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtCore module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QCBORSTREAMWRITER_H 41 #define QCBORSTREAMWRITER_H 42 43 #include <QtCore/qbytearray.h> 44 #include <QtCore/qcborcommon.h> 45 #include <QtCore/qscopedpointer.h> 46 #include <QtCore/qstring.h> 47 #include <QtCore/qstringview.h> 48 #ifndef QT_BOOTSTRAPPED 49 #include <QtCore/qfloat16.h> 50 #endif 51 52 QT_REQUIRE_CONFIG(cborstreamwriter); 53 54 // See qcborcommon.h for why we check 55 #if defined(QT_X11_DEFINES_FOUND) 56 # undef True 57 # undef False 58 #endif 59 60 QT_BEGIN_NAMESPACE 61 62 class QIODevice; 63 64 class QCborStreamWriterPrivate; 65 class Q_CORE_EXPORT QCborStreamWriter 66 { 67 public: 68 explicit QCborStreamWriter(QIODevice *device); 69 explicit QCborStreamWriter(QByteArray *data); 70 ~QCborStreamWriter(); 71 Q_DISABLE_COPY(QCborStreamWriter) 72 73 void setDevice(QIODevice *device); 74 QIODevice *device() const; 75 76 void append(quint64 u); 77 void append(qint64 i); 78 void append(QCborNegativeInteger n); append(const QByteArray & ba)79 void append(const QByteArray &ba) { appendByteString(ba.constData(), ba.size()); } 80 void append(QLatin1String str); 81 void append(QStringView str); 82 void append(QCborTag tag); append(QCborKnownTags tag)83 void append(QCborKnownTags tag) { append(QCborTag(tag)); } 84 void append(QCborSimpleType st); append(std::nullptr_t)85 void append(std::nullptr_t) { append(QCborSimpleType::Null); } 86 #ifndef QT_BOOTSTRAPPED 87 void append(qfloat16 f); 88 #endif 89 void append(float f); 90 void append(double d); 91 92 void appendByteString(const char *data, qsizetype len); 93 void appendTextString(const char *utf8, qsizetype len); 94 95 // convenience append(bool b)96 void append(bool b) { append(b ? QCborSimpleType::True : QCborSimpleType::False); } appendNull()97 void appendNull() { append(QCborSimpleType::Null); } appendUndefined()98 void appendUndefined() { append(QCborSimpleType::Undefined); } 99 100 #ifndef Q_QDOC 101 // overloads to make normal code not complain append(int i)102 void append(int i) { append(qint64(i)); } append(uint u)103 void append(uint u) { append(quint64(u)); } 104 #endif 105 #ifndef QT_NO_CAST_FROM_ASCII 106 void append(const char *str, qsizetype size = -1) 107 { appendTextString(str, (str && size == -1) ? int(strlen(str)) : size); } 108 #endif 109 110 void startArray(); 111 void startArray(quint64 count); 112 bool endArray(); 113 void startMap(); 114 void startMap(quint64 count); 115 bool endMap(); 116 117 // no API for encoding chunked strings 118 119 private: 120 QScopedPointer<QCborStreamWriterPrivate> d; 121 }; 122 123 QT_END_NAMESPACE 124 125 #if defined(QT_X11_DEFINES_FOUND) 126 # define True 1 127 # define False 0 128 #endif 129 130 #endif // QCBORSTREAMWRITER_H 131