summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/lldb/Core/ThreadSafeSTLMap.h1
-rw-r--r--include/lldb/Core/ValueObjectSyntheticFilter.h6
-rw-r--r--source/Core/ValueObjectSyntheticFilter.cpp24
3 files changed, 16 insertions, 15 deletions
diff --git a/include/lldb/Core/ThreadSafeSTLMap.h b/include/lldb/Core/ThreadSafeSTLMap.h
index 703ce481f..4235edc92 100644
--- a/include/lldb/Core/ThreadSafeSTLMap.h
+++ b/include/lldb/Core/ThreadSafeSTLMap.h
@@ -16,6 +16,7 @@
// Other libraries and framework includes
// Project includes
+#include "lldb/lldb-defines.h"
#include "lldb/Host/Mutex.h"
namespace lldb_private {
diff --git a/include/lldb/Core/ValueObjectSyntheticFilter.h b/include/lldb/Core/ValueObjectSyntheticFilter.h
index 9846ae6e2..49c5601dc 100644
--- a/include/lldb/Core/ValueObjectSyntheticFilter.h
+++ b/include/lldb/Core/ValueObjectSyntheticFilter.h
@@ -12,10 +12,10 @@
// C Includes
// C++ Includes
-#include <map>
#include <vector>
// Other libraries and framework includes
// Project includes
+#include "lldb/Core/ThreadSafeSTLMap.h"
#include "lldb/Core/ValueObject.h"
namespace lldb_private {
@@ -154,8 +154,8 @@ protected:
lldb::SyntheticChildrenSP m_synth_sp;
std::unique_ptr<SyntheticChildrenFrontEnd> m_synth_filter_ap;
- typedef std::map<uint32_t, ValueObject*> ByIndexMap;
- typedef std::map<const char*, uint32_t> NameToIndexMap;
+ typedef ThreadSafeSTLMap<uint32_t, ValueObject*> ByIndexMap;
+ typedef ThreadSafeSTLMap<const char*, uint32_t> NameToIndexMap;
typedef ByIndexMap::iterator ByIndexIterator;
typedef NameToIndexMap::iterator NameToIndexIterator;
diff --git a/source/Core/ValueObjectSyntheticFilter.cpp b/source/Core/ValueObjectSyntheticFilter.cpp
index 9bdf68963..dafe73a5e 100644
--- a/source/Core/ValueObjectSyntheticFilter.cpp
+++ b/source/Core/ValueObjectSyntheticFilter.cpp
@@ -182,8 +182,8 @@ ValueObjectSynthetic::UpdateValue ()
if (m_synth_filter_ap->Update() == false)
{
// filter said that cached values are stale
- m_children_byindex.clear();
- m_name_toindex.clear();
+ m_children_byindex.Clear();
+ m_name_toindex.Clear();
// usually, an object's value can change but this does not alter its children count
// for a synthetic VO that might indeed happen, so we need to tell the upper echelons
// that they need to come back to us asking for children
@@ -216,23 +216,22 @@ ValueObjectSynthetic::GetChildAtIndex (size_t idx, bool can_create)
{
UpdateValueIfNeeded();
- ByIndexIterator iter = m_children_byindex.find(idx);
-
- if (iter == m_children_byindex.end())
+ ValueObject *valobj;
+ if (m_children_byindex.GetValueForKey(idx, valobj) == false)
{
if (can_create && m_synth_filter_ap.get() != NULL)
{
lldb::ValueObjectSP synth_guy = m_synth_filter_ap->GetChildAtIndex (idx);
if (!synth_guy)
return synth_guy;
- m_children_byindex[idx]= synth_guy.get();
+ m_children_byindex.SetValueForKey(idx, synth_guy.get());
return synth_guy;
}
else
return lldb::ValueObjectSP();
}
else
- return iter->second->GetSP();
+ return valobj->GetSP();
}
lldb::ValueObjectSP
@@ -253,20 +252,21 @@ ValueObjectSynthetic::GetIndexOfChildWithName (const ConstString &name)
{
UpdateValueIfNeeded();
- NameToIndexIterator iter = m_name_toindex.find(name.GetCString());
+ uint32_t found_index = UINT32_MAX;
+ bool did_find = m_name_toindex.GetValueForKey(name.GetCString(), found_index);
- if (iter == m_name_toindex.end() && m_synth_filter_ap.get() != NULL)
+ if (!did_find && m_synth_filter_ap.get() != NULL)
{
uint32_t index = m_synth_filter_ap->GetIndexOfChildWithName (name);
if (index == UINT32_MAX)
return index;
- m_name_toindex[name.GetCString()] = index;
+ m_name_toindex.SetValueForKey(name.GetCString(), index);
return index;
}
- else if (iter == m_name_toindex.end() && m_synth_filter_ap.get() == NULL)
+ else if (!did_find && m_synth_filter_ap.get() == NULL)
return UINT32_MAX;
else /*if (iter != m_name_toindex.end())*/
- return iter->second;
+ return found_index;
}
bool