diff options
author | Greg Clayton <gclayton@apple.com> | 2010-07-23 23:33:17 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2010-07-23 23:33:17 +0000 |
commit | 9fed0d85b23ace3dfe98b423c3cc91db2adc8ca9 (patch) | |
tree | 28337c453c873b05973c76ddf4d0d3f0b2fa86f5 /lldb/source/Breakpoint/BreakpointList.cpp | |
parent | 893483000d935a97c109b051f115f60567279fd9 (diff) | |
download | bcm5719-llvm-9fed0d85b23ace3dfe98b423c3cc91db2adc8ca9.tar.gz bcm5719-llvm-9fed0d85b23ace3dfe98b423c3cc91db2adc8ca9.zip |
Added needed breakpoint functionality to the public API that includes:
SBTarget:
- get breakpoint count
- get breakpoint at index
SBBreakpoint:
- Extract data from breakpoint events
llvm-svn: 109289
Diffstat (limited to 'lldb/source/Breakpoint/BreakpointList.cpp')
-rw-r--r-- | lldb/source/Breakpoint/BreakpointList.cpp | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/lldb/source/Breakpoint/BreakpointList.cpp b/lldb/source/Breakpoint/BreakpointList.cpp index 0d9444f7371..ff0738a44ee 100644 --- a/lldb/source/Breakpoint/BreakpointList.cpp +++ b/lldb/source/Breakpoint/BreakpointList.cpp @@ -13,6 +13,7 @@ // C++ Includes // Other libraries and framework includes // Project includes +#include "lldb/Target/Target.h" using namespace lldb; using namespace lldb_private; @@ -31,23 +32,37 @@ BreakpointList::~BreakpointList() break_id_t -BreakpointList::Add (BreakpointSP &bp) +BreakpointList::Add (BreakpointSP &bp_sp, bool notify) { Mutex::Locker locker(m_mutex); // Internal breakpoint IDs are negative, normal ones are positive - bp->SetID (m_is_internal ? --m_next_break_id : ++m_next_break_id); - m_breakpoints.push_back(bp); - return bp->GetID(); + bp_sp->SetID (m_is_internal ? --m_next_break_id : ++m_next_break_id); + + m_breakpoints.push_back(bp_sp); + if (notify) + { + if (bp_sp->GetTarget().EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) + bp_sp->GetTarget().BroadcastEvent (Target::eBroadcastBitBreakpointChanged, + new Breakpoint::BreakpointEventData (eBreakpointEventTypeAdded, bp_sp)); + } + return bp_sp->GetID(); } bool -BreakpointList::Remove (break_id_t break_id) +BreakpointList::Remove (break_id_t break_id, bool notify) { Mutex::Locker locker(m_mutex); bp_collection::iterator pos = GetBreakpointIDIterator(break_id); // Predicate if (pos != m_breakpoints.end()) { + BreakpointSP bp_sp (*pos); m_breakpoints.erase(pos); + if (notify) + { + if (bp_sp->GetTarget().EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) + bp_sp->GetTarget().BroadcastEvent (Target::eBroadcastBitBreakpointChanged, + new Breakpoint::BreakpointEventData (eBreakpointEventTypeRemoved, bp_sp)); + } return true; } return false; @@ -64,11 +79,19 @@ BreakpointList::SetEnabledAll (bool enabled) void -BreakpointList::RemoveAll () +BreakpointList::RemoveAll (bool notify) { Mutex::Locker locker(m_mutex); ClearAllBreakpointSites (); + if (notify) + { + bp_collection::iterator pos, end = m_breakpoints.end(); + for (pos = m_breakpoints.begin(); pos != end; ++pos) + if ((*pos)->GetTarget().EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) + (*pos)->GetTarget().BroadcastEvent (Target::eBroadcastBitBreakpointChanged, + new Breakpoint::BreakpointEventData (eBreakpointEventTypeRemoved, *pos)); + } m_breakpoints.erase (m_breakpoints.begin(), m_breakpoints.end()); } @@ -144,7 +167,7 @@ BreakpointList::Dump (Stream *s) const BreakpointSP -BreakpointList::GetBreakpointByIndex (uint32_t i) +BreakpointList::GetBreakpointAtIndex (uint32_t i) { Mutex::Locker locker(m_mutex); BreakpointSP stop_sp; @@ -160,7 +183,7 @@ BreakpointList::GetBreakpointByIndex (uint32_t i) } const BreakpointSP -BreakpointList::GetBreakpointByIndex (uint32_t i) const +BreakpointList::GetBreakpointAtIndex (uint32_t i) const { Mutex::Locker locker(m_mutex); BreakpointSP stop_sp; |