enabled LLVM make style building and made this compile LLDB on Mac OS X. We can now iterate on this to make the build work on both linux and macosx. llvm-svn: 108009
181 lines
5.2 KiB
C++
181 lines
5.2 KiB
C++
//===-- BreakpointLocationCollection.cpp ------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/Breakpoint/BreakpointLocationCollection.h"
|
|
#include "lldb/Core/ModuleList.h"
|
|
#include "lldb/Breakpoint/BreakpointLocation.h"
|
|
#include "lldb/Breakpoint/BreakpointLocationList.h"
|
|
#include "lldb/Target/Thread.h"
|
|
#include "lldb/Target/ThreadSpec.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
//----------------------------------------------------------------------
|
|
// BreakpointLocationCollection constructor
|
|
//----------------------------------------------------------------------
|
|
BreakpointLocationCollection::BreakpointLocationCollection() :
|
|
m_break_loc_collection()
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// Destructor
|
|
//----------------------------------------------------------------------
|
|
BreakpointLocationCollection::~BreakpointLocationCollection()
|
|
{
|
|
}
|
|
|
|
void
|
|
BreakpointLocationCollection::Add(const BreakpointLocationSP &bp_loc)
|
|
{
|
|
BreakpointLocationSP old_bp_loc = FindByIDPair (bp_loc->GetBreakpoint().GetID(), bp_loc->GetID());
|
|
if (!old_bp_loc.get())
|
|
m_break_loc_collection.push_back(bp_loc);
|
|
}
|
|
|
|
bool
|
|
BreakpointLocationCollection::Remove (lldb::break_id_t bp_id, lldb::break_id_t bp_loc_id)
|
|
{
|
|
collection::iterator pos = GetIDPairIterator(bp_id, bp_loc_id); // Predicate
|
|
if (pos != m_break_loc_collection.end())
|
|
{
|
|
m_break_loc_collection.erase(pos);
|
|
return true;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
|
|
class BreakpointIDPairMatches
|
|
{
|
|
public:
|
|
BreakpointIDPairMatches (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) :
|
|
m_break_id(break_id),
|
|
m_break_loc_id (break_loc_id)
|
|
{
|
|
}
|
|
|
|
bool operator() (const BreakpointLocationSP &bp_loc) const
|
|
{
|
|
return m_break_id == bp_loc->GetBreakpoint().GetID()
|
|
&& m_break_loc_id == bp_loc->GetID();
|
|
}
|
|
|
|
private:
|
|
const lldb::break_id_t m_break_id;
|
|
const lldb::break_id_t m_break_loc_id;
|
|
};
|
|
|
|
BreakpointLocationCollection::collection::iterator
|
|
BreakpointLocationCollection::GetIDPairIterator (lldb::break_id_t break_id, lldb::break_id_t break_loc_id)
|
|
{
|
|
return std::find_if(m_break_loc_collection.begin(), m_break_loc_collection.end(), // Search full range
|
|
BreakpointIDPairMatches(break_id, break_loc_id)); // Predicate
|
|
}
|
|
|
|
BreakpointLocationCollection::collection::const_iterator
|
|
BreakpointLocationCollection::GetIDPairConstIterator (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const
|
|
{
|
|
return std::find_if(m_break_loc_collection.begin(), m_break_loc_collection.end(), // Search full range
|
|
BreakpointIDPairMatches(break_id, break_loc_id)); // Predicate
|
|
}
|
|
|
|
BreakpointLocationSP
|
|
BreakpointLocationCollection::FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id)
|
|
{
|
|
BreakpointLocationSP stop_sp;
|
|
collection::iterator pos = GetIDPairIterator(break_id, break_loc_id);
|
|
if (pos != m_break_loc_collection.end())
|
|
stop_sp = *pos;
|
|
|
|
return stop_sp;
|
|
}
|
|
|
|
const BreakpointLocationSP
|
|
BreakpointLocationCollection::FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const
|
|
{
|
|
BreakpointLocationSP stop_sp;
|
|
collection::const_iterator pos = GetIDPairConstIterator(break_id, break_loc_id);
|
|
if (pos != m_break_loc_collection.end())
|
|
stop_sp = *pos;
|
|
|
|
return stop_sp;
|
|
}
|
|
|
|
BreakpointLocationSP
|
|
BreakpointLocationCollection::GetByIndex (uint32_t i)
|
|
{
|
|
BreakpointLocationSP stop_sp;
|
|
if (i < m_break_loc_collection.size())
|
|
stop_sp = m_break_loc_collection[i];
|
|
|
|
return stop_sp;
|
|
}
|
|
|
|
const BreakpointLocationSP
|
|
BreakpointLocationCollection::GetByIndex (uint32_t i) const
|
|
{
|
|
BreakpointLocationSP stop_sp;
|
|
if (i < m_break_loc_collection.size())
|
|
stop_sp = m_break_loc_collection[i];
|
|
|
|
return stop_sp;
|
|
}
|
|
|
|
bool
|
|
BreakpointLocationCollection::ShouldStop (StoppointCallbackContext *context)
|
|
{
|
|
bool shouldStop = false;
|
|
|
|
const size_t count = GetSize();
|
|
for (size_t i = 0; i < count; i++) {
|
|
bool one_result = GetByIndex(i)->ShouldStop(context);
|
|
if (one_result)
|
|
shouldStop = true;
|
|
}
|
|
return shouldStop;
|
|
}
|
|
|
|
bool
|
|
BreakpointLocationCollection::ValidForThisThread (Thread *thread)
|
|
{
|
|
collection::iterator pos,
|
|
begin = m_break_loc_collection.begin(),
|
|
end = m_break_loc_collection.end();
|
|
|
|
for (pos = begin; pos != end; ++pos)
|
|
{
|
|
if ((*pos)->ValidForThisThread (thread))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
void
|
|
BreakpointLocationCollection::GetDescription (Stream *s, lldb::DescriptionLevel level)
|
|
{
|
|
collection::iterator pos,
|
|
begin = m_break_loc_collection.begin(),
|
|
end = m_break_loc_collection.end();
|
|
|
|
for (pos = begin; pos != end; ++pos)
|
|
{
|
|
if (pos != begin)
|
|
s->PutChar(' ');
|
|
(*pos)->GetDescription(s, level);
|
|
}
|
|
}
|