Debugger: Add listener interface for TargetHostInterface.
This commit is contained in:
@@ -36,6 +36,7 @@ TeamDebuggerOptions::TeamDebuggerOptions()
|
||||
TargetHostInterface::TargetHostInterface()
|
||||
:
|
||||
BLooper(),
|
||||
fListeners(),
|
||||
fTeamDebuggers(20, false)
|
||||
{
|
||||
}
|
||||
@@ -43,6 +44,10 @@ TargetHostInterface::TargetHostInterface()
|
||||
|
||||
TargetHostInterface::~TargetHostInterface()
|
||||
{
|
||||
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||
Listener* listener = it.Next();) {
|
||||
listener->TargetHostInterfaceQuit(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -124,6 +129,22 @@ TargetHostInterface::RemoveTeamDebugger(TeamDebugger* debugger)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::AddListener(Listener* listener)
|
||||
{
|
||||
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
||||
fListeners.Add(listener);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::RemoveListener(Listener* listener)
|
||||
{
|
||||
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
||||
fListeners.Remove(listener);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::Quit()
|
||||
{
|
||||
@@ -172,6 +193,7 @@ TargetHostInterface::TeamDebuggerStarted(TeamDebugger* debugger)
|
||||
{
|
||||
AutoLocker<TargetHostInterface> locker(this);
|
||||
AddTeamDebugger(debugger);
|
||||
_NotifyTeamDebuggerStarted(debugger);
|
||||
}
|
||||
|
||||
|
||||
@@ -189,9 +211,9 @@ TargetHostInterface::TeamDebuggerQuit(TeamDebugger* debugger)
|
||||
{
|
||||
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
||||
RemoveTeamDebugger(debugger);
|
||||
interfaceLocker.Unlock();
|
||||
|
||||
if (debugger->Thread() >= 0) {
|
||||
_NotifyTeamDebuggerQuit(debugger);
|
||||
BMessage message(MSG_TEAM_DEBUGGER_QUIT);
|
||||
message.AddInt32("thread", debugger->Thread());
|
||||
PostMessage(&message);
|
||||
@@ -251,6 +273,26 @@ TargetHostInterface::_StartTeamDebugger(team_id teamID,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::_NotifyTeamDebuggerStarted(TeamDebugger* debugger)
|
||||
{
|
||||
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||
Listener* listener = it.Next();) {
|
||||
listener->TeamDebuggerStarted(debugger);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::_NotifyTeamDebuggerQuit(TeamDebugger* debugger)
|
||||
{
|
||||
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||
Listener* listener = it.Next();) {
|
||||
listener->TeamDebuggerQuit(debugger);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*static*/ int
|
||||
TargetHostInterface::_CompareDebuggers(const TeamDebugger* a,
|
||||
const TeamDebugger* b)
|
||||
@@ -269,3 +311,30 @@ TargetHostInterface::_FindDebuggerByKey(const team_id* team,
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - TargetHostInterface::Listener
|
||||
|
||||
|
||||
TargetHostInterface::Listener::~Listener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::Listener::TeamDebuggerStarted(TeamDebugger* debugger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::Listener::TeamDebuggerQuit(TeamDebugger* debugger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TargetHostInterface::Listener::TargetHostInterfaceQuit(
|
||||
TargetHostInterface* interface)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
#include <ObjectList.h>
|
||||
|
||||
#include <util/DoublyLinkedList.h>
|
||||
|
||||
#include "TeamDebugger.h"
|
||||
|
||||
|
||||
@@ -17,13 +19,13 @@ class DebuggerInterface;
|
||||
class Settings;
|
||||
class SettingsManager;
|
||||
class TargetHost;
|
||||
class TeamDebugger;
|
||||
struct TeamDebuggerOptions;
|
||||
class UserInterface;
|
||||
|
||||
|
||||
class TargetHostInterface : public BLooper, private TeamDebugger::Listener {
|
||||
public:
|
||||
class Listener;
|
||||
TargetHostInterface();
|
||||
virtual ~TargetHostInterface();
|
||||
|
||||
@@ -52,6 +54,10 @@ public:
|
||||
virtual status_t FindTeamByThread(thread_id thread,
|
||||
team_id& _teamID) const = 0;
|
||||
|
||||
|
||||
void AddListener(Listener* listener);
|
||||
void RemoveListener(Listener* listener);
|
||||
|
||||
// BLooper
|
||||
virtual void Quit();
|
||||
virtual void MessageReceived(BMessage* message);
|
||||
@@ -67,18 +73,37 @@ private:
|
||||
status_t _StartTeamDebugger(team_id teamID,
|
||||
const TeamDebuggerOptions& options,
|
||||
bool stopInMain);
|
||||
|
||||
void _NotifyTeamDebuggerStarted(
|
||||
TeamDebugger* debugger);
|
||||
void _NotifyTeamDebuggerQuit(
|
||||
TeamDebugger* debugger);
|
||||
|
||||
static int _CompareDebuggers(const TeamDebugger* a,
|
||||
const TeamDebugger* b);
|
||||
static int _FindDebuggerByKey(const team_id* team,
|
||||
const TeamDebugger* debugger);
|
||||
private:
|
||||
typedef DoublyLinkedList<Listener> ListenerList;
|
||||
typedef BObjectList<TeamDebugger> TeamDebuggerList;
|
||||
|
||||
private:
|
||||
ListenerList fListeners;
|
||||
TeamDebuggerList fTeamDebuggers;
|
||||
};
|
||||
|
||||
|
||||
class TargetHostInterface::Listener
|
||||
: public DoublyLinkedListLinkImpl<Listener> {
|
||||
public:
|
||||
virtual ~Listener();
|
||||
virtual void TeamDebuggerStarted(TeamDebugger* debugger);
|
||||
virtual void TeamDebuggerQuit(TeamDebugger* debugger);
|
||||
virtual void TargetHostInterfaceQuit(
|
||||
TargetHostInterface* interface);
|
||||
};
|
||||
|
||||
|
||||
struct TeamDebuggerOptions {
|
||||
TeamDebuggerOptions();
|
||||
int commandLineArgc;
|
||||
|
||||
Reference in New Issue
Block a user