Debugger: Further additions to TargetHostInterface.

TargetHostInterface:
- Provide interface for tracking list of TeamDebuggers attached to this
  particular interface instance. Will eventually replace the current
  mechanism where the Debugger app tracks this directly.

LocalTargetHostInterface:
- Cleanups.
This commit is contained in:
Rene Gollent 2016-04-06 20:55:50 -04:00
parent 0421aa8cbe
commit 7442abd1c5
4 changed files with 94 additions and 6 deletions

View File

@ -5,8 +5,16 @@
#include "TargetHostInterface.h" #include "TargetHostInterface.h"
#include "TeamDebugger.h"
TargetHostInterface::TargetHostInterface()
:
BReferenceable(),
fTeamDebuggers(20, false)
{
}
// #pragma mark - TargetHostInterface
TargetHostInterface::~TargetHostInterface() TargetHostInterface::~TargetHostInterface()
{ {
@ -18,3 +26,64 @@ TargetHostInterface::SetName(const BString& name)
{ {
fName = 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;
}

View File

@ -8,23 +8,33 @@
#include <OS.h> #include <OS.h>
#include <String.h> #include <String.h>
#include <ObjectList.h>
#include <Referenceable.h> #include <Referenceable.h>
class DebuggerInterface; class DebuggerInterface;
class TargetHost; class TargetHost;
class TeamDebugger;
class TargetHostInterface : public BReferenceable { class TargetHostInterface : public BReferenceable {
public: public:
TargetHostInterface();
virtual ~TargetHostInterface(); virtual ~TargetHostInterface();
virtual status_t Init() = 0;
virtual void Close() = 0;
const BString& Name() const { return fName; } const BString& Name() const { return fName; }
void SetName(const BString& name); 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 bool Connected() const = 0;
virtual TargetHost* GetTargetHost() = 0; virtual TargetHost* GetTargetHost() = 0;
@ -36,8 +46,17 @@ public:
const char* const* arguments, const char* const* arguments,
DebuggerInterface*& _interface) = 0; 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<TeamDebugger> TeamDebuggerList;
private: private:
BString fName; BString fName;
TeamDebuggerList fTeamDebuggers;
}; };

View File

@ -10,6 +10,8 @@
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <image.h>
#include <AutoLocker.h> #include <AutoLocker.h>
#include <system_info.h> #include <system_info.h>
#include <util/KMessage.h> #include <util/KMessage.h>

View File

@ -7,8 +7,6 @@
#include "TargetHostInterface.h" #include "TargetHostInterface.h"
#include <Looper.h>
class LocalTargetHostInterface : public TargetHostInterface { class LocalTargetHostInterface : public TargetHostInterface {
public: public: