xref: /haiku/headers/private/debugger/model/TargetHost.h (revision 13581b3d2a71545960b98fefebc5225b5bf29072)
1 /*
2  * Copyright 2016, Rene Gollent, rene@gollent.com.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef TARGET_HOST_H
6 #define TARGET_HOST_H
7 
8 #include <Locker.h>
9 #include <OS.h>
10 #include <String.h>
11 
12 #include <ObjectList.h>
13 #include <Referenceable.h>
14 #include <util/DoublyLinkedList.h>
15 
16 
17 class TeamInfo;
18 
19 
20 class TargetHost : public BReferenceable {
21 public:
22 			class Listener;
23 public:
24 								TargetHost(const BString& name);
25 	virtual						~TargetHost();
26 
27 			bool				Lock()			{ return fLock.Lock(); }
28 			void				Unlock()		{ fLock.Unlock(); }
29 
30 			const BString&		Name() const	{ return fName; }
31 
32 			void				AddListener(Listener* listener);
33 			void				RemoveListener(Listener* listener);
34 
35 			int32				CountTeams() const;
36 			status_t			AddTeam(const team_info& info);
37 			void				RemoveTeam(team_id team);
38 			void				UpdateTeam(const team_info& info);
39 			TeamInfo*			TeamInfoAt(int32 index) const;
40 			TeamInfo*			TeamInfoByID(team_id team) const;
41 
42 private:
43 			typedef DoublyLinkedList<Listener> ListenerList;
44 			typedef BObjectList<TeamInfo> TeamInfoList;
45 
46 private:
47 	static	int 				_CompareTeams(const TeamInfo* a,
48 									const TeamInfo* b);
49 	static	int					_FindTeamByKey(const team_id* id,
50 									const TeamInfo* info);
51 
52 			void				_NotifyTeamAdded(TeamInfo* info);
53 			void				_NotifyTeamRemoved(team_id team);
54 			void				_NotifyTeamRenamed(TeamInfo* info);
55 
56 private:
57 			BString				fName;
58 			BLocker				fLock;
59 			ListenerList		fListeners;
60 			TeamInfoList		fTeams;
61 };
62 
63 
64 class TargetHost::Listener
65 	: public DoublyLinkedListLinkImpl<TargetHost::Listener> {
66 public:
67 	virtual						~Listener();
68 
69 	virtual	void				TeamAdded(TeamInfo* info);
70 	virtual	void				TeamRemoved(team_id team);
71 	virtual	void				TeamRenamed(TeamInfo* info);
72 };
73 
74 #endif	// TARGET_HOST_H
75