xref: /haiku/headers/private/debugger/model/Image.h (revision 2897df967633aab846ff4917b53e2af7d1e54eeb)
1 /*
2  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef IMAGE_H
6 #define IMAGE_H
7 
8 #include <image.h>
9 
10 #include <Referenceable.h>
11 #include <util/DoublyLinkedList.h>
12 
13 #include "ImageInfo.h"
14 
15 
16 enum image_debug_info_state {
17 	IMAGE_DEBUG_INFO_NOT_LOADED,
18 	IMAGE_DEBUG_INFO_LOADING,
19 	IMAGE_DEBUG_INFO_LOADED,
20 	IMAGE_DEBUG_INFO_UNAVAILABLE
21 };
22 
23 
24 class ImageDebugInfo;
25 class LocatableFile;
26 class Team;
27 
28 
29 class Image : public BReferenceable, public DoublyLinkedListLinkImpl<Image> {
30 public:
31 								Image(Team* team, const ImageInfo& imageInfo,
32 									LocatableFile* imageFile);
33 								~Image();
34 
35 			status_t			Init();
36 
37 			Team*				GetTeam() const		{ return fTeam; }
38 			image_id			ID() const			{ return fInfo.ImageID(); }
39 			const BString&		Name() const		{ return fInfo.Name(); }
40 			const ImageInfo&	Info() const		{ return fInfo; }
41 			image_type			Type() const		{ return fInfo.Type(); }
42 			LocatableFile*		ImageFile() const	{ return fImageFile; }
43 
44 			bool				ContainsAddress(target_addr_t address) const;
45 
46 			// mutable attributes follow (locking required)
47 			ImageDebugInfo*		GetImageDebugInfo() const { return fDebugInfo; }
48 			image_debug_info_state ImageDebugInfoState() const
49 									{ return fDebugInfoState; }
50 			status_t			SetImageDebugInfo(ImageDebugInfo* debugInfo,
51 									image_debug_info_state state);
52 
53 private:
54 			Team*				fTeam;
55 			ImageInfo			fInfo;
56 			LocatableFile*		fImageFile;
57 			// mutable
58 			ImageDebugInfo*		fDebugInfo;
59 			image_debug_info_state fDebugInfoState;
60 };
61 
62 
63 typedef DoublyLinkedList<Image> ImageList;
64 
65 
66 #endif	// IMAGE_H
67