Extended implementing StarDict *.dict file
[mdictionary] / src / plugins / stardict / UncompressedReader.cpp
1 #include "UncompressedReader.h"
2
3
4 UncompressedReader::UncompressedReader(QObject *parent) :
5         StarDictReader(parent) {
6
7 }
8
9 UncompressedReader::UncompressedReader(QString filename, QObject *parent) :
10 StarDictReader(parent) {
11     open(filename);
12 }
13
14 UncompressedReader::~UncompressedReader() {
15     if(_file.isOpen())
16         _file.close();
17 }
18
19 bool UncompressedReader::open(QString file) {
20     _file.setFileName(file);
21     _stream.setDevice(&_file);
22     return _file.open(QFile::ReadOnly);
23 }
24
25 void UncompressedReader::close() {
26     _file.close();
27 }
28
29 QChar UncompressedReader::readChar() {
30     char c[1];
31
32     _stream.readRawData(c, 1);
33     return QChar(c[0]);
34 }
35
36 QString UncompressedReader::readKeyword() {
37     QString result;
38     QChar c;
39     c = readChar();
40
41     while(c != '\0') {
42         result += c;
43         c = readChar();
44     }
45
46     return result;
47 }
48
49
50 QByteArray UncompressedReader::readString(qint64 offset, qint32 len) {
51     char* buf;
52     buf = new char[len];
53
54     _file.seek(offset);
55     _stream.readRawData(buf, len);
56
57     QByteArray result(buf, len);
58     delete [] buf;
59     return result;
60 }
61
62 qint32 UncompressedReader::readInt32BigEndian() {
63     _stream.setByteOrder(QDataStream::BigEndian);
64     qint32 value;
65     _stream>>value;
66     _stream.setByteOrder(QDataStream::LittleEndian);
67
68     return value;
69 }
70
71 qint64 UncompressedReader::readInt64BigEndian() {
72     _stream.setByteOrder(QDataStream::BigEndian);
73     qint64 value;
74     _stream>>value;
75     _stream.setByteOrder(QDataStream::LittleEndian);
76
77     return value;
78 }