xref: /haiku/src/bin/debug/profile/Team.h (revision f2b4344867e97c3f4e742a1b4a15e6879644601a)
1 /*
2  * Copyright 2008-2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef TEAM_H
6 #define TEAM_H
7 
8 #include <String.h>
9 
10 #include <debug_support.h>
11 #include <ObjectList.h>
12 #include <Referenceable.h>
13 #include <util/DoublyLinkedList.h>
14 
15 #include "Thread.h"
16 
17 
18 class Image;
19 class SharedImage;
20 struct system_profiler_team_added;
21 
22 
23 class Team : public BReferenceable {
24 public:
25 								Team();
26 								~Team();
27 
28 			status_t			Init(team_id teamID, port_id debuggerPort);
29 			status_t			Init(system_profiler_team_added* addedInfo);
30 			status_t			InitThread(Thread* thread);
31 
32 			void				RemoveThread(Thread* thread);
33 
34 			void				Exec(int32 event, const char* args,
35 									const char* threadName);
36 
37 			status_t			AddImage(SharedImage* sharedImage,
38 									const image_info& imageInfo, team_id owner,
39 									int32 event);
40 			status_t			RemoveImage(image_id imageID, int32 event);
41 
42 	inline	const BObjectList<Image>&	Images() const;
43 			Image*				FindImage(image_id id) const;
44 
45 	inline	team_id				ID() const;
46 
47 private:
48 			void				_RemoveImage(int32 index, int32 event);
49 
50 			bool				_SynchronousProfiling() const
51 									{ return fDebugContext.nub_port < 0; }
52 
53 private:
54 	typedef DoublyLinkedList<Thread> ThreadList;
55 
56 			team_id				fID;
57 			BString				fArgs;
58 			port_id				fNubPort;
59 			debug_context		fDebugContext;
60 			ThreadList			fThreads;
61 			BObjectList<Image>	fImages;
62 };
63 
64 
65 // #pragma mark -
66 
67 
68 const BObjectList<Image>&
69 Team::Images() const
70 {
71 	return fImages;
72 }
73 
74 
75 team_id
76 Team::ID() const
77 {
78 	return fID;
79 }
80 
81 
82 #endif	// TEAM_H
83