1 /*
2     This file is part of the KDE project
3     SPDX-FileCopyrightText: 2009 David Faure <faure@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6 */
7 
8 #ifndef KSYCOCADEVICES_P_H
9 #define KSYCOCADEVICES_P_H
10 
11 #include <config-ksycoca.h>
12 #include <stdlib.h>
13 // TODO: remove mmap() from kdewin32 and use QFile::mmap() when needed
14 #ifdef Q_OS_WIN
15 #undef HAVE_MMAP
16 #endif
17 
18 class QString;
19 class QDataStream;
20 class QBuffer;
21 class QFile;
22 class QIODevice;
23 class KMemFile;
24 
25 class KSycocaAbstractDevice
26 {
27 public:
KSycocaAbstractDevice()28     KSycocaAbstractDevice()
29         : m_stream(nullptr)
30     {
31     }
32 
33     virtual ~KSycocaAbstractDevice();
34 
35     virtual QIODevice *device() = 0;
36 
37     QDataStream *&stream();
38 
39 private:
40     QDataStream *m_stream;
41 };
42 
43 #if HAVE_MMAP
44 // Reading from a mmap'ed file
45 class KSycocaMmapDevice : public KSycocaAbstractDevice
46 {
47 public:
48     KSycocaMmapDevice(const char *sycoca_mmap, size_t sycoca_size);
49     ~KSycocaMmapDevice() override;
50     QIODevice *device() override;
51 
52 private:
53     QBuffer *m_buffer;
54 };
55 #endif
56 
57 // Reading from a QFile
58 class KSycocaFileDevice : public KSycocaAbstractDevice
59 {
60 public:
61     explicit KSycocaFileDevice(const QString &path);
62     ~KSycocaFileDevice() override;
63     QIODevice *device() override;
64 
65 private:
66     QFile *m_database;
67 };
68 
69 #ifndef QT_NO_SHAREDMEMORY
70 // Reading from a KMemFile
71 class KSycocaMemFileDevice : public KSycocaAbstractDevice
72 {
73 public:
74     explicit KSycocaMemFileDevice(const QString &path);
75     ~KSycocaMemFileDevice() override;
76     QIODevice *device() override;
77 
78 private:
79     KMemFile *m_database;
80 };
81 #endif
82 
83 // Reading from a dummy memory buffer
84 class KSycocaBufferDevice : public KSycocaAbstractDevice
85 {
86 public:
87     KSycocaBufferDevice();
88     ~KSycocaBufferDevice() override;
89     QIODevice *device() override;
90 
91 private:
92     QBuffer *m_buffer;
93 };
94 
95 #endif /* KSYCOCADEVICES_P_H */
96