[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