kopete/protocols/messenger/libpapillon
bytestream.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "Papillon/Base/ByteStream"
00022
00023
00024
00057
00058 namespace Papillon
00059 {
00060
00061 class ByteStream::Private
00062 {
00063 public:
00064 Private() {}
00065
00066 QByteArray readBuf, writeBuf;
00067 };
00068
00071 ByteStream::ByteStream(QObject *parent)
00072 :QObject(parent)
00073 {
00074 d = new Private;
00075 }
00076
00079 ByteStream::~ByteStream()
00080 {
00081 delete d;
00082 }
00083
00086 bool ByteStream::isOpen() const
00087 {
00088 return false;
00089 }
00090
00096 void ByteStream::close()
00097 {
00098 }
00099
00102 void ByteStream::write(const QByteArray &a)
00103 {
00104 if(!isOpen())
00105 return;
00106
00107 bool doWrite = bytesToWrite() == 0 ? true: false;
00108 appendWrite(a);
00109 if(doWrite)
00110 tryWrite();
00111 }
00112
00116 QByteArray ByteStream::read(int bytes)
00117 {
00118 return takeRead(bytes);
00119 }
00120
00123 int ByteStream::bytesAvailable() const
00124 {
00125 return d->readBuf.size();
00126 }
00127
00130 int ByteStream::bytesToWrite() const
00131 {
00132 return d->writeBuf.size();
00133 }
00134
00137 void ByteStream::clearReadBuffer()
00138 {
00139 d->readBuf.resize(0);
00140 }
00141
00144 void ByteStream::clearWriteBuffer()
00145 {
00146 d->writeBuf.resize(0);
00147 }
00148
00151 void ByteStream::appendRead(const QByteArray &block)
00152 {
00153 appendArray(&d->readBuf, block);
00154 }
00155
00158 void ByteStream::appendWrite(const QByteArray &block)
00159 {
00160 appendArray(&d->writeBuf, block);
00161 }
00162
00167 QByteArray ByteStream::takeRead(int size, bool del)
00168 {
00169 return takeArray(&d->readBuf, size, del);
00170 }
00171
00176 QByteArray ByteStream::takeWrite(int size, bool del)
00177 {
00178 return takeArray(&d->writeBuf, size, del);
00179 }
00180
00183 QByteArray & ByteStream::readBuf()
00184 {
00185 return d->readBuf;
00186 }
00187
00190 QByteArray & ByteStream::writeBuf()
00191 {
00192 return d->writeBuf;
00193 }
00194
00198 int ByteStream::tryWrite()
00199 {
00200 return -1;
00201 }
00202
00205 void ByteStream::appendArray(QByteArray *a, const QByteArray &b)
00206 {
00207 int oldsize = a->size();
00208 a->resize(oldsize + b.size());
00209 memcpy(a->data() + oldsize, b.data(), b.size());
00210 }
00211
00216 QByteArray ByteStream::takeArray(QByteArray *from, int size, bool del)
00217 {
00218 QByteArray a;
00219 if(size == 0) {
00220 a = *from;
00221 if(del)
00222 from->resize(0);
00223 }
00224 else {
00225 if(size > (int)from->size())
00226 size = from->size();
00227 a.resize(size);
00228 char *r = from->data();
00229 memcpy(a.data(), r, size);
00230 if(del) {
00231 int newsize = from->size()-size;
00232 memmove(r, r+size, newsize);
00233 from->resize(newsize);
00234 }
00235 }
00236 return a;
00237 }
00238
00239
00240
00241
00242
00243
00244
00247
00251
00254
00258
00262
00263
00264 }
00265
00266
00267 #include "bytestream.moc"