/* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #ifndef STATEMENT_H #define STATEMENT_H #include #include "SourceLocation.h" #include "TargetAddressRange.h" #include "Types.h" class Statement : public BReferenceable { public: virtual ~Statement(); virtual SourceLocation StartSourceLocation() const = 0; virtual TargetAddressRange CoveringAddressRange() const = 0; virtual int32 CountAddressRanges() const = 0; virtual TargetAddressRange AddressRangeAt(int32 index) const = 0; virtual bool ContainsAddress(target_addr_t address) const = 0; }; class AbstractStatement : public Statement { public: AbstractStatement(const SourceLocation& start); virtual SourceLocation StartSourceLocation() const; protected: SourceLocation fStart; }; class ContiguousStatement : public AbstractStatement { public: ContiguousStatement(const SourceLocation& start, const TargetAddressRange& range); const TargetAddressRange& AddressRange() const { return fRange; } virtual TargetAddressRange CoveringAddressRange() const; virtual int32 CountAddressRanges() const; virtual TargetAddressRange AddressRangeAt(int32 index) const; virtual bool ContainsAddress(target_addr_t address) const; protected: TargetAddressRange fRange; }; #endif // STATEMENT_H