43 lines
965 B
C
43 lines
965 B
C
|
#ifndef _PBQTIO_H
|
||
|
#define _PBQTIO_H
|
||
|
|
||
|
#include <google/protobuf/io/zero_copy_stream_impl.h>
|
||
|
|
||
|
class PbQtInputStream : public google::protobuf::io::CopyingInputStream
|
||
|
{
|
||
|
public:
|
||
|
PbQtInputStream(QIODevice *dev)
|
||
|
: dev_(dev) {};
|
||
|
int Read(void *buffer, int size) {
|
||
|
_top:
|
||
|
if (dev_->bytesAvailable())
|
||
|
return dev_->read(static_cast<char*>(buffer), size);
|
||
|
else
|
||
|
if (dev_->waitForReadyRead(-1))
|
||
|
goto _top;
|
||
|
else
|
||
|
return -1; //return dev_->atEnd() ? 0 : -1;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
QIODevice *dev_;
|
||
|
};
|
||
|
|
||
|
class PbQtOutputStream : public google::protobuf::io::CopyingOutputStream
|
||
|
{
|
||
|
public:
|
||
|
PbQtOutputStream(QIODevice *dev)
|
||
|
: dev_(dev) {};
|
||
|
bool Write(const void *buffer, int size) {
|
||
|
if (dev_->write(static_cast<const char*>(buffer), size) == size)
|
||
|
return true;
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
QIODevice *dev_;
|
||
|
};
|
||
|
|
||
|
#endif
|