29 #include <QtCore/QHash>
31 class KSycocaFactory::Private
34 Private() : mOffset(0),
35 m_sycocaDictOffset(0),
36 m_beginEntryOffset(0),
37 m_endEntryOffset(0) {}
44 int m_sycocaDictOffset;
45 int m_beginEntryOffset;
51 : m_resourceList(0), m_entryDict(0), m_str(0), d(new Private)
57 d->m_sycocaDictOffset = i;
59 d->m_beginEntryOffset = i;
61 d->m_endEntryOffset = i;
63 QDataStream* str =
stream();
64 int saveOffset = str->device()->pos();
66 d->m_sycocaDict =
new KSycocaDict(str, d->m_sycocaDictOffset);
67 saveOffset = str->device()->seek(saveOffset);
72 d->m_beginEntryOffset = 0;
73 d->m_endEntryOffset = 0;
90 str.device()->seek(d->mOffset);
91 str << (
qint32) d->m_sycocaDictOffset;
92 str << (
qint32) d->m_beginEntryOffset;
93 str << (
qint32) d->m_endEntryOffset;
101 if (!d->m_sycocaDict)
return;
103 d->mOffset = str.device()->pos();
104 d->m_sycocaDictOffset = 0;
109 d->m_beginEntryOffset = str.device()->pos();
113 for(KSycocaEntryDict::Iterator it =
m_entryDict->begin();
121 d->m_endEntryOffset = str.device()->pos();
125 str << (
qint32) entryCount;
126 for(KSycocaEntryDict::Iterator it =
m_entryDict->begin();
129 str <<
qint32(it->data()->offset());
133 d->m_sycocaDictOffset = str.device()->pos();
134 d->m_sycocaDict->save(str);
136 int endOfFactoryData = str.device()->pos();
142 str.device()->seek(endOfFactoryData);
151 if (!d->m_sycocaDict)
return;
166 const QString name = newEntry->storageId();
168 d->m_sycocaDict->add( name, newEntry );
177 if (!d->m_sycocaDict)
return;
180 d->m_sycocaDict->remove( entryName );
189 QDataStream* str =
stream();
190 if (!str)
return list;
191 str->device()->seek(d->m_endEntryOffset);
193 (*str) >> entryCount;
195 if (entryCount > 8192)
197 kDebug(7021) << QThread::currentThread() <<
"error detected in factory" <<
this;
204 for(
int i = 0; i < entryCount; i++)
206 (*str) >> offsetList[i];
209 for(
int i = 0; i < entryCount; i++)
217 delete [] offsetList;
233 return d->m_sycocaDict;
238 return d->m_beginEntryOffset == d->m_endEntryOffset;