[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdepim/akregator/src/libsyndication/src/rdf
From: Frank Osterfeld <frank.osterfeld () kdemail ! net>
Date: 2006-04-02 10:53:02
Message-ID: 1143975182.462349.18416.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 525509 by osterfeld:
speed up parsing of RDF feeds by factor ~2.5, improving the statement lookup
M +13 -12 model.cpp
--- trunk/KDE/kdepim/akregator/src/libsyndication/src/rdf/model.cpp #525508:525509
@@ -47,6 +47,8 @@
ResourcePtr nullResource;
StatementPtr nullStatement;
QHash<QString, StatementPtr> statements;
+ QHash<QString, QList<StatementPtr> > stmtsBySubject;
+
QHash<int, NodePtr> nodes;
QHash<QString, ResourcePtr> resources;
QHash<QString, PropertyPtr> properties;
@@ -120,11 +122,16 @@
void addToHashes(StatementPtr stmt, const QString& key)
{
statements[key] = stmt;
+ stmtsBySubject[stmt->subject()->uri()].append(stmt);
}
void removeFromHashes(const QString& key)
{
+ StatementPtr stmt = statements[key];
+ if (stmt)
+ stmtsBySubject[stmt->subject()->uri()].remove(stmt);
statements.remove(key);
+
}
bool initialized;
@@ -325,15 +332,13 @@
if (!d->resources.contains(resource->uri()))
return false;
- QList<StatementPtr> stmts = d->statements.values();
+ QList<StatementPtr> stmts = d->stmtsBySubject[resource->uri()];
QList<StatementPtr>::ConstIterator it = stmts.begin();
QList<StatementPtr>::ConstIterator end = stmts.end();
- // TODO: use more efficient storage
-
for ( ; it != end; ++it)
{
- if (*((*it)->subject()) == *resource && *((*it)->predicate()) == *property)
+ if (*((*it)->predicate()) == *property)
return true;
}
@@ -342,15 +347,13 @@
StatementPtr Model::resourceProperty(const Resource* resource, PropertyPtr property) const
{
- QList<StatementPtr> stmts = d->statements.values();
+ QList<StatementPtr> stmts = d->stmtsBySubject[resource->uri()];
QList<StatementPtr>::ConstIterator it = stmts.begin();
QList<StatementPtr>::ConstIterator end = stmts.end();
- // TODO: use more efficient storage
-
for ( ; it != end; ++it)
{
- if (*((*it)->subject()) == *resource && *((*it)->predicate()) == *property)
+ if (*((*it)->predicate()) == *property)
return *it;
}
@@ -360,15 +363,13 @@
QList<StatementPtr> Model::resourceProperties(const Resource* resource, PropertyPtr property) const
{
QList<StatementPtr> res;
- QList<StatementPtr> stmts = d->statements.values();
+ QList<StatementPtr> stmts = d->stmtsBySubject[resource->uri()];
QList<StatementPtr>::ConstIterator it = stmts.begin();
QList<StatementPtr>::ConstIterator end = stmts.end();
- // TODO: use more efficient storage
-
for ( ; it != end; ++it)
{
- if (*((*it)->subject()) == *resource && *((*it)->predicate()) == *property)
+ if (*((*it)->predicate()) == *property)
res.append(*it);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic