Author: gclayton
Date: Thu Feb 12 19:19:24 2015
New Revision: 229008

URL: http://llvm.org/viewvc/llvm-project?rev=229008&view=rev
Log:
Add a ModuleList::ForEach(...) which takes the module list mutex calls the 
std::function argument with each module. If you return true in the callback, 
iteration will continue, if you return false, iteration will stop and the lock 
will be released.

<rdar://problem/19213054>


Modified:
    lldb/trunk/include/lldb/Core/ModuleList.h
    lldb/trunk/source/Core/ModuleList.cpp

Modified: lldb/trunk/include/lldb/Core/ModuleList.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ModuleList.h?rev=229008&r1=229007&r2=229008&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ModuleList.h (original)
+++ lldb/trunk/include/lldb/Core/ModuleList.h Thu Feb 12 19:19:24 2015
@@ -12,6 +12,7 @@
 
 #include <vector>
 #include <list>
+#include <functional>
 
 #include "lldb/lldb-private.h"
 #include "lldb/Host/Mutex.h"
@@ -562,6 +563,9 @@ public:
     static bool
     RemoveSharedModuleIfOrphaned (const Module *module_ptr);
 
+    void
+    ForEach (std::function <bool (const lldb::ModuleSP &module_sp)> const 
&callback) const;
+
 protected:
     //------------------------------------------------------------------
     // Class typedefs.

Modified: lldb/trunk/source/Core/ModuleList.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ModuleList.cpp?rev=229008&r1=229007&r2=229008&view=diff
==============================================================================
--- lldb/trunk/source/Core/ModuleList.cpp (original)
+++ lldb/trunk/source/Core/ModuleList.cpp Thu Feb 12 19:19:24 2015
@@ -1162,3 +1162,15 @@ ModuleList::LoadScriptingResourcesInTarg
     }
     return errors.size() == 0;
 }
+
+void
+ModuleList::ForEach (std::function <bool (const ModuleSP &module_sp)> const 
&callback) const
+{
+    Mutex::Locker locker(m_modules_mutex);
+    for (const auto &module : m_modules)
+    {
+        // If the callback returns false, then stop iterating and break out
+        if (!callback (module))
+            break;
+    }
+}


_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to