diff --git a/src/apps/debugger/target_host_interface/TargetHostInterface.cpp b/src/apps/debugger/target_host_interface/TargetHostInterface.cpp index 473e2c55249..c213c6a5f40 100644 --- a/src/apps/debugger/target_host_interface/TargetHostInterface.cpp +++ b/src/apps/debugger/target_host_interface/TargetHostInterface.cpp @@ -5,8 +5,16 @@ #include "TargetHostInterface.h" +#include "TeamDebugger.h" + + +TargetHostInterface::TargetHostInterface() + : + BReferenceable(), + fTeamDebuggers(20, false) +{ +} -// #pragma mark - TargetHostInterface TargetHostInterface::~TargetHostInterface() { @@ -18,3 +26,64 @@ TargetHostInterface::SetName(const BString& name) { fName = name; } + + +int32 +TargetHostInterface::CountTeamDebuggers() const +{ + return fTeamDebuggers.CountItems(); +} + + +TeamDebugger* +TargetHostInterface::TeamDebuggerAt(int32 index) const +{ + return fTeamDebuggers.ItemAt(index); +} + + +TeamDebugger* +TargetHostInterface::FindTeamDebugger(team_id team) const +{ + return fTeamDebuggers.BinarySearchByKey(team, &_FindDebuggerByKey); +} + + +status_t +TargetHostInterface::AddTeamDebugger(TeamDebugger* debugger) +{ + if (!fTeamDebuggers.BinaryInsert(debugger, &_CompareDebuggers)) + return B_NO_MEMORY; + + return B_OK; +} + + +void +TargetHostInterface::RemoveTeamDebugger(TeamDebugger* debugger) +{ + int32 index = fTeamDebuggers.BinarySearchIndexByKey(debugger->TeamID(), + &_FindDebuggerByKey); + if (index >= 0) + fTeamDebuggers.RemoveItemAt(index); +} + + +/*static*/ int +TargetHostInterface::_CompareDebuggers(const TeamDebugger* a, + const TeamDebugger* b) +{ + return a->TeamID() < b->TeamID() ? -1 : 1; +} + + +/*static*/ int +TargetHostInterface::_FindDebuggerByKey(const team_id* team, + const TeamDebugger* debugger) +{ + if (*team < debugger->TeamID()) + return -1; + else if (*team > debugger->TeamID()) + return 1; + return 0; +} diff --git a/src/apps/debugger/target_host_interface/TargetHostInterface.h b/src/apps/debugger/target_host_interface/TargetHostInterface.h index 825ddafb553..d6ad373978c 100644 --- a/src/apps/debugger/target_host_interface/TargetHostInterface.h +++ b/src/apps/debugger/target_host_interface/TargetHostInterface.h @@ -8,23 +8,33 @@ #include #include +#include #include class DebuggerInterface; class TargetHost; +class TeamDebugger; class TargetHostInterface : public BReferenceable { public: + TargetHostInterface(); virtual ~TargetHostInterface(); - virtual status_t Init() = 0; - virtual void Close() = 0; - const BString& Name() const { return fName; } void SetName(const BString& name); + + int32 CountTeamDebuggers() const; + TeamDebugger* TeamDebuggerAt(int32 index) const; + TeamDebugger* FindTeamDebugger(team_id team) const; + status_t AddTeamDebugger(TeamDebugger* debugger); + void RemoveTeamDebugger(TeamDebugger* debugger); + + virtual status_t Init() = 0; + virtual void Close() = 0; + virtual bool Connected() const = 0; virtual TargetHost* GetTargetHost() = 0; @@ -36,8 +46,17 @@ class TargetHostInterface : public BReferenceable { const char* const* arguments, DebuggerInterface*& _interface) = 0; +private: + static int _CompareDebuggers(const TeamDebugger* a, + const TeamDebugger* b); + static int _FindDebuggerByKey(const team_id* team, + const TeamDebugger* debugger); +private: + typedef BObjectList TeamDebuggerList; + private: BString fName; + TeamDebuggerList fTeamDebuggers; }; diff --git a/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.cpp b/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.cpp index ef3957e46ea..d1064787f70 100644 --- a/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.cpp +++ b/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.cpp @@ -10,6 +10,8 @@ #include #include +#include + #include #include #include diff --git a/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.h b/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.h index 972355ee281..41bee898476 100644 --- a/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.h +++ b/src/apps/debugger/target_host_interface/interfaces/LocalTargetHostInterface.h @@ -7,8 +7,6 @@ #include "TargetHostInterface.h" -#include - class LocalTargetHostInterface : public TargetHostInterface { public: