[paludis-commits] r4549 - in trunk: . paludis

dleverton at svn.pioto.org dleverton at svn.pioto.org
Wed Apr 9 21:09:06 UTC 2008


Author: dleverton
Date: 2008-04-09 21:09:05 +0000 (Wed, 09 Apr 2008)
New Revision: 4549

Modified:
   trunk/ChangeLog
   trunk/paludis/ndbam.cc
Log:
Speed up NDBAM a little.


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-04-07 20:40:44 UTC (rev 4548)
+++ trunk/ChangeLog	2008-04-09 21:09:05 UTC (rev 4549)
@@ -5,6 +5,10 @@
 only listed in SVN log. For a summary of what has changed between releases,
 see the NEWS file. This file is occasionally pruned to ChangeLog.old.bz2.
 
+2008-04-09 David Leverton
+
+	* paludis/: Speed up NDBAM a little.
+
 2008-04-07 David Leverton
 
 	* paludis/, paludis/util/: Improve speed and memory usage for

Modified: trunk/paludis/ndbam.cc
===================================================================
--- trunk/paludis/ndbam.cc	2008-04-07 20:40:44 UTC (rev 4548)
+++ trunk/paludis/ndbam.cc	2008-04-09 21:09:05 UTC (rev 4549)
@@ -179,8 +179,8 @@
 
     Lock l(_imp->category_names_mutex);
     CategoryContentsMap::iterator cc_i(_imp->category_contents_map.find(c));
-    if (_imp->category_contents_map.end() == cc_i)
-        throw InternalError(PALUDIS_HERE, "has_category_named(" + stringify(c) + ") but got category_contents_map end");
+    if (_imp->category_contents_map.end() == cc_i || ! cc_i->second)
+        throw InternalError(PALUDIS_HERE, "has_category_named(" + stringify(c) + ") but got category_contents_map end or zero pointer");
     CategoryContents & cc(*cc_i->second);
 
     l.acquire_then_release_old(cc.mutex);
@@ -219,8 +219,9 @@
 NDBAM::has_category_named(const CategoryNamePart & c)
 {
     Lock l(_imp->category_names_mutex);
-    if (_imp->category_contents_map.end() != _imp->category_contents_map.find(c))
-        return true;
+    CategoryContentsMap::const_iterator it(_imp->category_contents_map.find(c));
+    if (_imp->category_contents_map.end() != it)
+        return it->second;
 
     if (! _imp->category_names)
     {
@@ -229,6 +230,7 @@
             _imp->category_contents_map.insert(std::make_pair(c, new CategoryContents));
             return true;
         }
+        _imp->category_contents_map.insert(std::make_pair(c, tr1::shared_ptr<CategoryContents>()));
     }
 
     return false;
@@ -242,14 +244,15 @@
 
     Lock l(_imp->category_names_mutex);
     CategoryContentsMap::iterator cc_i(_imp->category_contents_map.find(q.category));
-    if (_imp->category_contents_map.end() == cc_i)
-        throw InternalError(PALUDIS_HERE, "has_category_named(" + stringify(q.category) + ") but got category_contents_map end");
+    if (_imp->category_contents_map.end() == cc_i || ! cc_i->second)
+        throw InternalError(PALUDIS_HERE, "has_category_named(" + stringify(q.category) + ") but got category_contents_map end or zero pointer");
 
     CategoryContents & cc(*cc_i->second);
     l.acquire_then_release_old(cc.mutex);
 
-    if (cc.package_contents_map.end() != cc.package_contents_map.find(q))
-        return true;
+    PackageContentsMap::const_iterator it(cc.package_contents_map.find(q));
+    if (cc.package_contents_map.end() != it)
+        return it->second;
 
     if (! cc.package_names)
     {
@@ -258,6 +261,7 @@
             cc.package_contents_map.insert(std::make_pair(q, new PackageContents));
             return true;
         }
+        cc.package_contents_map.insert(std::make_pair(q, tr1::shared_ptr<PackageContents>()));
     }
 
     return false;
@@ -280,14 +284,14 @@
 
     Lock l(_imp->category_names_mutex);
     CategoryContentsMap::iterator cc_i(_imp->category_contents_map.find(q.category));
-    if (_imp->category_contents_map.end() == cc_i)
-        throw InternalError(PALUDIS_HERE, "has_package_named(" + stringify(q) + ") but got category_contents_map end");
+    if (_imp->category_contents_map.end() == cc_i || ! cc_i->second)
+        throw InternalError(PALUDIS_HERE, "has_package_named(" + stringify(q) + ") but got category_contents_map end or zero pointer");
     CategoryContents & cc(*cc_i->second);
     l.acquire_then_release_old(cc.mutex);
 
     PackageContentsMap::iterator pc_i(cc.package_contents_map.find(q));
-    if (cc.package_contents_map.end() == pc_i)
-        throw InternalError(PALUDIS_HERE, "has_package_named(" + stringify(q) + ") but got package_contents_map end");
+    if (cc.package_contents_map.end() == pc_i || ! pc_i->second)
+        throw InternalError(PALUDIS_HERE, "has_package_named(" + stringify(q) + ") but got package_contents_map end or zero pointer");
     PackageContents & pc(*pc_i->second);
     l.acquire_then_release_old(pc.mutex);
 



More information about the paludis-commits mailing list