gmio/src/support/qt_stream.cpp

53 lines
1.6 KiB
C++
Raw Normal View History

2014-01-21 23:19:27 +08:00
#include "qt_stream.h"
#include <QtCore/QFile>
#include <QtCore/QIODevice>
2014-01-27 22:03:50 +08:00
static foug_bool_t foug_stream_qiodevice_at_end(void* cookie)
{
2014-01-27 22:03:50 +08:00
return static_cast<QIODevice*>(cookie)->atEnd();
}
static int foug_stream_qiodevice_error(void* cookie)
{
2014-01-27 22:03:50 +08:00
const QIODevice* device = static_cast<QIODevice*>(cookie);
const QFile* file = dynamic_cast<const QFile*>(device);
if (file != NULL) {
return file->error();
}
else {
2014-01-27 22:03:50 +08:00
const QString err_str = static_cast<QIODevice*>(cookie)->errorString();
return !err_str.isEmpty() ? 1 : 0;
}
return 0;
}
2014-01-27 22:03:50 +08:00
static size_t foug_stream_qiodevice_read(void* cookie,
void* ptr,
size_t item_size,
size_t item_count)
{
2014-01-27 22:03:50 +08:00
QIODevice* device = static_cast<QIODevice*>(cookie);
const qint64 c = device->read(static_cast<char*>(ptr), item_size * item_count);
return c / item_size;
}
2014-01-27 22:03:50 +08:00
static size_t foug_stream_qiodevice_write(void* cookie,
const void* ptr,
size_t item_size,
size_t item_count)
{
2014-01-27 22:03:50 +08:00
QIODevice* device = static_cast<QIODevice*>(cookie);
const qint64 c = device->write(static_cast<const char*>(ptr), item_size * item_count);
return c / item_size;
}
void foug_stream_set_qiodevice(foug_stream_t* stream, QIODevice* device)
{
stream->cookie = device;
stream->at_end_func = foug_stream_qiodevice_at_end;
stream->error_func = foug_stream_qiodevice_error;
stream->read_func = foug_stream_qiodevice_read;
stream->write_func = foug_stream_qiodevice_write;
}