/* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #ifndef BREAKPOINT_H #define BREAKPOINT_H #include "UserBreakpoint.h" class Image; class BreakpointClient { public: virtual ~BreakpointClient(); }; class Breakpoint : public BReferenceable { public: Breakpoint(Image* image, target_addr_t address); ~Breakpoint(); Image* GetImage() const { return fImage; } target_addr_t Address() const { return fAddress; } bool IsInstalled() const { return fInstalled; } void SetInstalled(bool installed); bool ShouldBeInstalled() const; bool IsUnused() const; bool HasEnabledUserBreakpoint() const; UserBreakpointInstance* FirstUserBreakpoint() const { return fUserBreakpoints.Head(); } UserBreakpointInstance* LastUserBreakpoint() const { return fUserBreakpoints.Tail(); } const UserBreakpointInstanceList& UserBreakpoints() const { return fUserBreakpoints; } void AddUserBreakpoint( UserBreakpointInstance* instance); void RemoveUserBreakpoint( UserBreakpointInstance* instance); bool AddClient(BreakpointClient* client); void RemoveClient(BreakpointClient* client); static int CompareBreakpoints(const Breakpoint* a, const Breakpoint* b); static int CompareAddressBreakpoint( const target_addr_t* address, const Breakpoint* breakpoint); private: typedef BObjectList ClientList; private: target_addr_t fAddress; Image* fImage; UserBreakpointInstanceList fUserBreakpoints; ClientList fClients; bool fInstalled; }; #endif // BREAKPOINT_H