diff --git a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp index a44324dde7..de8b644a2b 100644 --- a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp +++ b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp @@ -7,6 +7,7 @@ #include #include +#include #include "LocalTargetHostInterfaceInfo.h" #include "TargetHostInterface.h" @@ -99,3 +100,56 @@ TargetHostInterfaceRoster::RegisterInterfaceInfos() return B_OK; } + + +int32 +TargetHostInterfaceRoster::CountInterfaceInfos() const +{ + return fInterfaceInfos.CountItems(); +} + + +TargetHostInterfaceInfo* +TargetHostInterfaceRoster::InterfaceInfoAt(int32 index) const +{ + return fInterfaceInfos.ItemAt(index); +} + + +status_t +TargetHostInterfaceRoster::CreateInterface(TargetHostInterfaceInfo* info, + Settings* settings, TargetHostInterface*& _interface) +{ + // TODO: this should eventually verify that an active interface with + // matching settings/type doesn't already exist, and if so, return that + // directly rather than instantiating a new one, since i.e. the interface + // for the local host only requires one instance. + AutoLocker locker(this); + TargetHostInterface* interface; + status_t error = info->CreateInterface(settings, interface); + if (error != B_OK) + return error; + + BReference interfaceReference(interface, true); + if (!fActiveInterfaces.AddItem(interface)) + return B_NO_MEMORY; + + _interface = interface; + interfaceReference.Detach(); + return B_OK; +} + + +int32 +TargetHostInterfaceRoster::CountActiveInterfaces() const +{ + return fActiveInterfaces.CountItems(); +} + + +TargetHostInterface* +TargetHostInterfaceRoster::ActiveInterfaceAt(int32 index) const +{ + return fActiveInterfaces.ItemAt(index); +} + diff --git a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h index 2a1689269f..6f3f12bbfc 100644 --- a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h +++ b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h @@ -25,18 +25,21 @@ public: static status_t CreateDefault(); static void DeleteDefault(); + bool Lock() { return fLock.Lock(); } + void Unlock() { fLock.Unlock(); } + status_t Init(); status_t RegisterInterfaceInfos(); - int32 CountInterfaceInfos(); + int32 CountInterfaceInfos() const; TargetHostInterfaceInfo* InterfaceInfoAt(int32 index) const; status_t CreateInterface(TargetHostInterfaceInfo* info, Settings* settings, - TargetHostInterface*& _interface) const; + TargetHostInterface*& _interface); - int32 CountActiveInterfaces(); + int32 CountActiveInterfaces() const; TargetHostInterface* ActiveInterfaceAt(int32 index) const; private: