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 "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;
}

View File

@ -8,23 +8,33 @@
#include <OS.h>
#include <String.h>
#include <ObjectList.h>
#include <Referenceable.h>
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 @@ public:
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<TeamDebugger> TeamDebuggerList;
private:
BString fName;
TeamDebuggerList fTeamDebuggers;
};

View File

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

View File

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