1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef DISASSEMBLED_CODE_H
6#define DISASSEMBLED_CODE_H
7
8
9#include <ObjectList.h>
10
11#include "SourceCode.h"
12
13
14class BString;
15class ContiguousStatement;
16
17
18class DisassembledCode : public SourceCode {
19public:
20								DisassembledCode(SourceLanguage* language);
21								~DisassembledCode();
22
23	virtual	bool				Lock();
24	virtual	void				Unlock();
25
26	virtual	SourceLanguage*		GetSourceLanguage() const;
27
28	virtual	int32				CountLines() const;
29	virtual	const char*			LineAt(int32 index) const;
30	virtual	int32				LineLengthAt(int32 index) const;
31
32	virtual	bool				GetStatementLocationRange(
33									const SourceLocation& location,
34									SourceLocation& _start,
35									SourceLocation& _end) const;
36
37	virtual	LocatableFile*		GetSourceFile() const;
38
39			Statement*			StatementAtAddress(target_addr_t address) const;
40			Statement*			StatementAtLocation(
41									const SourceLocation& location) const;
42			TargetAddressRange	StatementAddressRange() const;
43
44public:
45			bool				AddCommentLine(const BString& line);
46			bool				AddInstructionLine(const BString& line,
47									target_addr_t address, target_size_t size);
48										// instructions must be added in
49										// ascending address order
50
51private:
52			struct Line;
53
54			typedef BObjectList<Line> LineList;
55			typedef BObjectList<ContiguousStatement> StatementList;
56
57private:
58			bool				_AddLine(const BString& line,
59									ContiguousStatement* statement);
60	static	int					_CompareAddressStatement(
61									const target_addr_t* address,
62									const ContiguousStatement* statement);
63
64private:
65			SourceLanguage*		fLanguage;
66			LineList			fLines;
67			StatementList		fStatements;
68};
69
70
71#endif	// DISASSEMBLED_CODE_H
72