Copyright 2010 Comarch S.A.
*******************************************************************************/
+/*!
+ \file CompressedReader.cpp
+ \brief Class implementing StarDictReader interface and handling reading from compressed
+ files like .gz or .dz
-//Created by Mateusz Półrola
+ \author Mateusz Półrola
+*/
#include "CompressedReader.h"
#include <QtEndian>
StarDictReader(parent) {
}
+
CompressedReader::CompressedReader(QString filename, QObject *parent) :
StarDictReader(parent) {
open(filename);
}
+
CompressedReader::~CompressedReader() {
if(_file != NULL)
gzclose(_file);
}
+
bool CompressedReader::open(QString file) {
_file = gzopen(file.toStdString().c_str(), "rb");
if(_file == NULL)
return true;
}
+
void CompressedReader::close() {
gzclose(_file);
_file = NULL;
QString cha;
gzread(_file, c, 1);
- if(((unsigned char)c[0])>127){
+ if(((unsigned char)c[0])>239)
+ gzread(_file, c+1, 3);
+ else if(((unsigned char)c[0])>223)
+ gzread(_file, c+1, 2);
+ else if(((unsigned char)c[0])>191)
gzread(_file, c+1, 1);
- if(((unsigned char)c[1])>127 && ((unsigned char)c[1])<192){
- gzread(_file, c+2, 1);
- if(((unsigned char)c[2])>127 && ((unsigned char)c[2])<192)
- gzread(_file, c+3, 1);
- }
+ else if(((unsigned char)c[0])>127){
+ qDebug()<<"error - starDict - read wordList from UTF-8";
+ c[0]=0;
}
cha=QString::fromUtf8(c);
- return cha.at(0);
+ if(cha.size()!=0)
+ return cha.at(0);
+ else
+ return '\0';
}
+
qint32 CompressedReader::readInt32BigEndian() {
qint32 value;
gzread(_file, (void*)(&value), 4);
return qFromBigEndian(value);
}
+
qint64 CompressedReader::readInt64BigEndian() {
qint64 value;
gzread(_file, (void*)(&value), 8);
return value;
}
+
QString CompressedReader::readKeyword() {
QString result;
QChar c;
return result;
}
+
QByteArray CompressedReader::readString(qint64 offset, qint32 len) {
char* buf;
buf = new char[len];