* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "Breakpoint.h"
BreakpointClient::~BreakpointClient()
{
}
Breakpoint::Breakpoint(Image* image, target_addr_t address)
:
fAddress(address),
fImage(image),
fInstalled(false)
{
}
Breakpoint::~Breakpoint()
{
}
void
Breakpoint::SetInstalled(bool installed)
{
fInstalled = installed;
}
bool
Breakpoint::ShouldBeInstalled() const
{
if (!fClients.IsEmpty())
return true;
return !fClients.IsEmpty() || HasEnabledUserBreakpoint();
}
bool
Breakpoint::IsUnused() const
{
return fClients.IsEmpty() && fUserBreakpoints.IsEmpty();
}
bool
Breakpoint::HasEnabledUserBreakpoint() const
{
for (UserBreakpointInstanceList::ConstIterator it
= fUserBreakpoints.GetIterator();
UserBreakpointInstance* instance = it.Next();) {
if (instance->GetUserBreakpoint()->IsEnabled())
return true;
}
return false;
}
void
Breakpoint::AddUserBreakpoint(UserBreakpointInstance* instance)
{
fUserBreakpoints.Add(instance);
}
void
Breakpoint::RemoveUserBreakpoint(UserBreakpointInstance* instance)
{
fUserBreakpoints.Remove(instance);
}
bool
Breakpoint::AddClient(BreakpointClient* client)
{
return fClients.AddItem(client);
}
void
Breakpoint::RemoveClient(BreakpointClient* client)
{
fClients.RemoveItem(client);
}
int
Breakpoint::CompareBreakpoints(const Breakpoint* a, const Breakpoint* b)
{
if (a->Address() < b->Address())
return -1;
return a->Address() == b->Address() ? 0 : 1;
}
int
Breakpoint::CompareAddressBreakpoint(const target_addr_t* address,
const Breakpoint* breakpoint)
{
if (*address < breakpoint->Address())
return -1;
return *address == breakpoint->Address() ? 0 : 1;
}