LLVM  3.7.0
Public Member Functions | List of all members
llvm::MemoryObject Class Referenceabstract

Interface to data which might be streamed. More...

#include <MemoryObject.h>

Inheritance diagram for llvm::MemoryObject:
[legend]

Public Member Functions

virtual ~MemoryObject ()
 
virtual uint64_t getExtent () const =0
 Returns the size of the region in bytes. More...
 
virtual uint64_t readBytes (uint8_t *Buf, uint64_t Size, uint64_t Address) const =0
 Tries to read a contiguous range of bytes from the region, up to the end of the region. More...
 
virtual const uint8_t * getPointer (uint64_t address, uint64_t size) const =0
 Ensures that the requested data is in memory, and returns a pointer to it. More...
 
virtual bool isValidAddress (uint64_t address) const =0
 Returns true if the address is within the object (i.e. More...
 

Detailed Description

Interface to data which might be streamed.

Streamability has 2 important implications/restrictions. First, the data might not yet exist in memory when the request is made. This just means that readByte/readBytes might have to block or do some work to get it. More significantly, the exact size of the object might not be known until it has all been fetched. This means that to return the right result, getExtent must also wait for all the data to arrive; therefore it should not be called on objects which are actually streamed (this would defeat the purpose of streaming). Instead, isValidAddress can be used to test addresses without knowing the exact size of the stream. Finally, getPointer can be used instead of readBytes to avoid extra copying.

Definition at line 28 of file MemoryObject.h.

Constructor & Destructor Documentation

MemoryObject::~MemoryObject ( )
virtual

Definition at line 13 of file MemoryObject.cpp.

Member Function Documentation

virtual uint64_t llvm::MemoryObject::getExtent ( ) const
pure virtual

Returns the size of the region in bytes.

(The region is contiguous, so the highest valid address of the region is getExtent() - 1).

Returns
- The size of the region.

Implemented in llvm::StreamingMemoryObject.

Referenced by llvm::BitstreamCursor::readRecord(), and llvm::BitstreamCursor::skipRecord().

virtual const uint8_t* llvm::MemoryObject::getPointer ( uint64_t  address,
uint64_t  size 
) const
pure virtual

Ensures that the requested data is in memory, and returns a pointer to it.

More efficient than using readBytes if the data is already in memory. May block until (address - base + size) bytes have been read

Parameters
address- address of the byte, in the same space as getBase()
size- amount of data that must be available on return
Returns
- valid pointer to the requested data

Implemented in llvm::StreamingMemoryObject.

Referenced by llvm::BitstreamCursor::readRecord().

virtual bool llvm::MemoryObject::isValidAddress ( uint64_t  address) const
pure virtual

Returns true if the address is within the object (i.e.

between base and base + extent - 1 inclusive). May block until (address - base) bytes have been read

Parameters
address- address of the byte, in the same space as getBase()
Returns
- true if the address may be read with readByte()

Implemented in llvm::StreamingMemoryObject.

Referenced by llvm::BitstreamCursor::canSkipToPos().

virtual uint64_t llvm::MemoryObject::readBytes ( uint8_t *  Buf,
uint64_t  Size,
uint64_t  Address 
) const
pure virtual

Tries to read a contiguous range of bytes from the region, up to the end of the region.

Parameters
Buf- A pointer to a buffer to be filled in. Must be non-NULL and large enough to hold size bytes.
Size- The number of bytes to copy.
Address- The address of the first byte, in the same space as getBase().
Returns
- The number of bytes read.

Implemented in llvm::StreamingMemoryObject.

Referenced by llvm::BitstreamCursor::fillCurWord().


The documentation for this class was generated from the following files: