WARNING: USE THIS SOFTWARE AT YOUR OWN RISK! THIS IS EXPERIMENTAL SOFTWARE NOT INTENDED FOR PRODUCTION USE! Zuble is currently an early stage prototype. As such Zuble is minimally tested and inherently unstable. It is provided for experimental, development, and demonstration purposes only. Zuble QML Types   |  Zuble C++ Classes   |  Zuble Overview
Zuble  0.1
Zuble Framework C++/QML extension API
ZDataStream.h
Go to the documentation of this file.
1 /*
2 * Zuble - A run-time system for QML/Javascript applications
3 * Copyright (C) 2013, 2014 Bob Dinitto
4 *
5 * Filename: ZDataStream.h
6 * Created on: 11/9/2014
7 * Author: Bob Dinitto
8 *
9 * Zuble is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 *
23 */
24 
25 #ifndef ZDATASTREAM_H
26 #define ZDATASTREAM_H
27 #include <QObject>
28 #include <QTextStream>
29 
30 #include "zblcore_global.h"
31 #include "ZFile.h"
32 #include "ZioDevice.h"
33 
34 //class QVariantMap;
35 
36 
37 namespace Zbl
38 {
39 
53 class ZDataStream : public QObject
54 {
55  Q_OBJECT
56  Q_ENUMS(Status)
57  Q_ENUMS(Version)
58  Q_ENUMS(ByteOrder)
59  Q_ENUMS(FloatingPointPrecision)
60 public:
61 
62  typedef QSharedPointer<QDataStream> QDataStreamPtr;
63 
64 
65  // to participate in automatic enum propagation
66  // for QML programs we redeclare these QDataStream enums;
67  // note background Javascript programs can't use QML
68  // type engine, those programs use m_tags instead
69 
70 
71  enum Status {
72  StatusOk = QDataStream::Ok,
73  StatusReadPastEnd = QDataStream::ReadPastEnd,
74  StatusReadCorruptData = QDataStream::ReadCorruptData,
75  StatusWriteFailed = QDataStream::WriteFailed
76  };
77 
78 
79  enum Version {
80  Version_Qt_1_0 = QDataStream::Qt_1_0,
81  Version_Qt_2_0 = QDataStream::Qt_2_0,
82  Version_Qt_2_1 = QDataStream::Qt_2_1,
83  Version_Qt_3_0 = QDataStream::Qt_3_0,
84  Version_Qt_3_1 = QDataStream::Qt_3_1,
85  Version_Qt_3_3 = QDataStream::Qt_3_3,
86  Version_Qt_4_0 = QDataStream::Qt_4_0,
87  Version_Qt_4_1 = QDataStream::Qt_4_1,
88  Version_Qt_4_2 = QDataStream::Qt_4_2,
89  Version_Qt_4_3 = QDataStream::Qt_4_3,
90  Version_Qt_4_4 = QDataStream::Qt_4_4,
91  Version_Qt_4_5 = QDataStream::Qt_4_5,
92  Version_Qt_4_6 = QDataStream::Qt_4_6,
93  Version_Qt_4_7 = QDataStream::Qt_4_7,
94  Version_Qt_4_8 = QDataStream::Qt_4_8,
95  Version_Qt_4_9 = QDataStream::Qt_4_9,
96  Version_Qt_5_0 = QDataStream::Qt_5_0,
97  Version_Qt_5_1 = QDataStream::Qt_5_1,
98  Version_Qt_5_2 = QDataStream::Qt_5_2,
99  Version_Qt_5_3 = QDataStream::Qt_5_3,
100  Version_Qt_5_4 = QDataStream::Qt_5_4,
101  Version_Qt_5_5 = QDataStream::Qt_5_5,
102  Version_Qt_5_6 = QDataStream::Qt_5_6,
103  Version_Qt_5_7 = QDataStream::Qt_5_7,
104  Version_Qt_5_8 = QDataStream::Qt_5_8,
105  Version_Qt_5_9 = QDataStream::Qt_5_9,
106  Version_Qt_5_10 = QDataStream::Qt_5_10,
107  Version_Qt_5_11 = QDataStream::Qt_5_11,
108  Version_Qt_5_12 = QDataStream::Qt_5_12,
109  Version_Qt_5_13 = QDataStream::Qt_5_13,
110 
111 #if QT_VERSION >= 0x050e00
112 #error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion
113 #endif
115 
116  };
117 
118 
119  enum ByteOrder {
120  ByteOrderBigEndian = QDataStream::BigEndian,
121  ByteOrderLittleEndian = QDataStream::LittleEndian
122  };
123 
125  FpSinglePrecision = QDataStream::SinglePrecision,
126  FpDoublePrecision = QDataStream::DoublePrecision
127  };
128 
129 
130  explicit ZDataStream(QObject *parent = 0);
131  explicit ZDataStream(const ZqIODevicePtr device, QObject *parent = 0);
132  explicit ZDataStream(const ZqByteArrayPtr byteArray, QObject *parent = 0);
133 
138  static void registerType();
139 
140  Q_PROPERTY(uint status READ getStatus)
141  Q_PROPERTY(QObject* device READ getJsDevice)
142  Q_PROPERTY(QVariant tags READ getTags)
143  Q_PROPERTY(uint byteOrder READ getByteOrder WRITE setByteOrder)
146  Q_PROPERTY(uint version READ getVersion WRITE setVersion)
147 
148  uint getStatus() const;
149  QObject* getJsDevice();
150  QVariant getTags();
151 
152  void setByteOrder(uint byteOrder);
153  uint getByteOrder() const;
154 
156  uint getFloatingPointPrecision() const;
157 
158  void setVersion(uint version);
159  uint getVersion() const;
160 
161  Q_INVOKABLE void release();
162  Q_INVOKABLE void resetStatus();
163 
164 
165  Q_INVOKABLE QList<int> jReadBytes();
166  Q_INVOKABLE bool jWriteBytes(const QList<int> data);
167 
168  Q_INVOKABLE QObject* zReadBytes();
169  Q_INVOKABLE bool zWriteBytes(QObject* zByteArray);
170 
171  Q_INVOKABLE QList<int> jReadRawData(uint len);
172  Q_INVOKABLE bool jWriteRawData(const QList<int> data);
173 
174  Q_INVOKABLE QObject* zReadRawData(uint len);
175  Q_INVOKABLE bool zWriteRawData(QObject* zByteArray);
176 
177  Q_INVOKABLE uint skipRawData(uint len);
178 
179  Q_INVOKABLE quint8 readByte();
180  Q_INVOKABLE qint16 readInt16();
181  Q_INVOKABLE quint16 readUInt16();
182  Q_INVOKABLE qint32 readInt32();
183  Q_INVOKABLE quint32 readUInt32();
184  Q_INVOKABLE qint64 readInt64();
185  Q_INVOKABLE quint64 readUInt64();
186  Q_INVOKABLE float readFloat();
187  Q_INVOKABLE double readDouble();
188 
189  Q_INVOKABLE bool writeByte(quint8 data);
190  Q_INVOKABLE bool writeInt16(qint16 data);
191  Q_INVOKABLE bool writeUInt16(quint16 data);
192  Q_INVOKABLE bool writeInt32(qint32 data);
193  Q_INVOKABLE bool writeUInt32(quint32 data);
194  Q_INVOKABLE bool writeInt64(qint64 data);
195  Q_INVOKABLE bool writeUInt64(quint64 data);
196  Q_INVOKABLE bool writeFloat(float data);
197  Q_INVOKABLE bool writeDouble(double data);
198 
199 signals:
200 
201 public slots:
202 
203  void getQDevice(QIODevice** device); // for ZioDevice
204 
205 protected:
206 
207  void validateData() const;
208  void validateReadable() const;
209  void validateWritable() const;
210 
211  void initZioDevice();
212  void createTags();
213 
219 
224 
228  QDataStreamPtr m_ds;
229 
234 
239  static QVariant m_tags;
240 };
241 
242 
243 } // Zbl
244 
245 
246 
247 
248 #endif // ZDATASTREAM_H
Q_INVOKABLE bool jWriteBytes(const QList< int > data)
Q_INVOKABLE quint8 readByte()
Q_INVOKABLE uint skipRawData(uint len)
Q_INVOKABLE bool zWriteRawData(QObject *zByteArray)
void validateData() const
uint getVersion() const
ZioDevice * m_zd
Pointer to contained ZioDevice object.
Definition: ZDataStream.h:233
Q_INVOKABLE QObject * zReadBytes()
Q_INVOKABLE qint64 readInt64()
void setFloatingPointPrecision(uint floatingPointPrecision)
Q_INVOKABLE bool writeUInt64(quint64 data)
Q_INVOKABLE quint32 readUInt32()
Q_INVOKABLE qint16 readInt16()
ZqByteArrayPtr m_b
Smartpointer to embedded QByteArray.
Definition: ZDataStream.h:223
void validateWritable() const
static QVariant m_tags
QVariantMap of QDataStream enumerations for use by Javascript programs.
Definition: ZDataStream.h:239
Q_INVOKABLE float readFloat()
Q_INVOKABLE bool writeFloat(float data)
void validateReadable() const
Reads and writes binary data to an i/o stream.
Definition: ZDataStream.h:53
uint floatingPointPrecision
Definition: ZDataStream.h:145
ZDataStream(QObject *parent=0)
Definition: ZDataStream.cpp:88
A javascript wrapper for QIODevice.
Definition: ZioDevice.h:40
Definition: ZAndGate.cpp:6
Q_INVOKABLE bool writeByte(quint8 data)
Q_INVOKABLE qint32 readInt32()
Q_INVOKABLE void resetStatus()
Q_INVOKABLE bool writeInt32(qint32 data)
Q_INVOKABLE quint64 readUInt64()
Q_INVOKABLE QList< int > jReadBytes()
Q_INVOKABLE bool writeUInt16(quint16 data)
Q_INVOKABLE bool zWriteBytes(QObject *zByteArray)
Q_INVOKABLE QList< int > jReadRawData(uint len)
uint getStatus() const
Q_INVOKABLE double readDouble()
uint getFloatingPointPrecision() const
static void registerType()
Registers ZDataStream as a QML type.
uint getByteOrder() const
QDataStreamPtr m_ds
Smartpointer to embedded QDataStream.
Definition: ZDataStream.h:228
Q_INVOKABLE bool writeInt64(qint64 data)
QVariant getTags()
QSharedPointer< QByteArray > ZqByteArrayPtr
Definition: zglobal.h:166
QObject * getJsDevice()
void getQDevice(QIODevice **device)
Q_INVOKABLE void release()
ZqIODevicePtr m_dv
Smartpointer to embedded QIODevice.
Definition: ZDataStream.h:218
Q_INVOKABLE bool writeUInt32(quint32 data)
Q_INVOKABLE quint16 readUInt16()
Q_INVOKABLE bool writeDouble(double data)
QSharedPointer< QIODevice > ZqIODevicePtr
Definition: zglobal.h:164
Q_INVOKABLE QObject * zReadRawData(uint len)
void setByteOrder(uint byteOrder)
Q_INVOKABLE bool writeInt16(qint16 data)
QSharedPointer< QDataStream > QDataStreamPtr
Definition: ZDataStream.h:62
void setVersion(uint version)
Q_INVOKABLE bool jWriteRawData(const QList< int > data)