The BLOCKS SDK
littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace > Struct Template Reference

Description

template<int programAndHeapSpace, int stackAndGlobalsSpace>
struct littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >

Loads a program, and lets the user execute its functions.

The programAndHeapSpace is the number of bytes allocated for program + heap. stackAndGlobalsSpace is the size of the globals + stack area.

Memory layout:

Program code goes at address 0, followed by any shared data the program needs globals are at the top end of the buffer stack space stretches downwards from the start of the globals

Public Member Functions

 Runner () noexcept
 
void setNativeFunctions (const NativeFunction *functions, int numFunctions, void *userDataForCallback) noexcept
 Installs an array of native functions that the code can use. More...
 
int getNumNativeFunctions () const noexcept
 Returns the number of native functions available. More...
 
const NativeFunctiongetNativeFunction (int index) const noexcept
 Returns one of the native functions available. More...
 
void reset () noexcept
 Clears the memory state. More...
 
void clearHeapAndGlobals () noexcept
 Clears all the non-program data. More...
 
ErrorCode callFunction (const char *functionSignature) noexcept
 Calls one of the functions in the program, by its textual signature. More...
 
ErrorCode callFunction (FunctionID function) noexcept
 Calls one of the functions in the program, by its function ID. More...
 
uint8getProgramAndDataStart () const noexcept
 
uint8getProgramAndDataEnd () const noexcept
 
uint32 getProgramAndDataSize () const noexcept
 
uint8getProgramHeapStart () const noexcept
 
uint8getProgramHeapEnd () const noexcept
 
uint16 getProgramHeapSize () const noexcept
 
bool isProgramValid () const noexcept
 
void setDataByte (uint32 index, uint8 value) noexcept
 Sets a byte of data. More...
 
void setHeapByte (uint32 index, uint8 value) noexcept
 
uint8 getHeapByte (uint32 index) const noexcept
 
uint32 getHeapBits (uint32 startBit, uint32 numBits) const noexcept
 
int32 setHeapInt (uint32 byteOffset, uint32 value) noexcept
 
int32 getHeapInt (uint32 byteOffset) const noexcept
 

Static Public Member Functions

static const char * getErrorDescription (ErrorCode e) noexcept
 Returns a text description for an error code. More...
 
static uint32 getMaximumProgramSize () noexcept
 

Public Attributes

uint8 allMemory [(size_t)(((programAndHeapSpace+stackAndGlobalsSpace)+3) &~3)]
 
Program program
 

Static Public Attributes

static constexpr uint32 totalProgramAndHeapSpace = programAndHeapSpace
 
static constexpr uint32 totalStackAndGlobalsSpace = stackAndGlobalsSpace
 

Classes

struct  FunctionExecutionContext
 

Public Types

enum class  ErrorCode : uint8 {
  ok = 0 , executionTimedOut , unknownInstruction , stackOverflow ,
  stackUnderflow , illegalAddress , divisionByZero , unknownFunction
}
 Return codes from a function call. More...
 

Constructor & Destructor Documentation

◆ Runner()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::Runner ( )
noexcept

Member Function Documentation

◆ setNativeFunctions()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setNativeFunctions ( const NativeFunction functions,
int  numFunctions,
void *  userDataForCallback 
)
noexcept

Installs an array of native functions that the code can use.

Note that this doesn't take ownership of any memory involved, so the caller mustn't pass any dangling pointers

◆ getNumNativeFunctions()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
int littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getNumNativeFunctions ( ) const
noexcept

Returns the number of native functions available.

◆ getNativeFunction()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
const NativeFunction& littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getNativeFunction ( int  index) const
noexcept

Returns one of the native functions available.

The index must not be out of range.

◆ reset()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::reset ( )
noexcept

◆ clearHeapAndGlobals()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::clearHeapAndGlobals ( )
noexcept

◆ getErrorDescription()

◆ callFunction() [1/2]

template<int programAndHeapSpace, int stackAndGlobalsSpace>
ErrorCode littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::callFunction ( const char *  functionSignature)
noexcept

Calls one of the functions in the program, by its textual signature.

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::FunctionExecutionContext::run().

◆ callFunction() [2/2]

template<int programAndHeapSpace, int stackAndGlobalsSpace>
ErrorCode littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::callFunction ( FunctionID  function)
noexcept

Calls one of the functions in the program, by its function ID.

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::FunctionExecutionContext::run().

◆ getMaximumProgramSize()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
static uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getMaximumProgramSize ( )
staticnoexcept

◆ getProgramAndDataStart()

◆ getProgramAndDataEnd()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint8* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataEnd ( ) const
noexcept

◆ getProgramAndDataSize()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataSize ( ) const
noexcept

◆ getProgramHeapStart()

◆ getProgramHeapEnd()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint8* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapEnd ( ) const
noexcept

◆ getProgramHeapSize()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint16 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapSize ( ) const
noexcept

◆ isProgramValid()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
bool littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::isProgramValid ( ) const
noexcept

◆ setDataByte()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setDataByte ( uint32  index,
uint8  value 
)
noexcept

◆ setHeapByte()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapByte ( uint32  index,
uint8  value 
)
noexcept

◆ getHeapByte()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint8 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapByte ( uint32  index) const
noexcept

◆ getHeapBits()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapBits ( uint32  startBit,
uint32  numBits 
) const
noexcept

◆ setHeapInt()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
int32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapInt ( uint32  byteOffset,
uint32  value 
)
noexcept

◆ getHeapInt()

template<int programAndHeapSpace, int stackAndGlobalsSpace>
int32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapInt ( uint32  byteOffset) const
noexcept

Member Enumeration Documentation

◆ ErrorCode

template<int programAndHeapSpace, int stackAndGlobalsSpace>
enum littlefoot::Runner::ErrorCode : uint8
strong

Return codes from a function call.

Enumerator
ok 
executionTimedOut 
unknownInstruction 
stackOverflow 
stackUnderflow 
illegalAddress 
divisionByZero 
unknownFunction 

Member Data Documentation

◆ totalProgramAndHeapSpace

template<int programAndHeapSpace, int stackAndGlobalsSpace>
constexpr uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::totalProgramAndHeapSpace = programAndHeapSpace
staticconstexpr

◆ totalStackAndGlobalsSpace

template<int programAndHeapSpace, int stackAndGlobalsSpace>
constexpr uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::totalStackAndGlobalsSpace = stackAndGlobalsSpace
staticconstexpr

◆ allMemory

template<int programAndHeapSpace, int stackAndGlobalsSpace>
uint8 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::allMemory[(size_t)(((programAndHeapSpace+stackAndGlobalsSpace)+3) &~3)]

◆ program

template<int programAndHeapSpace, int stackAndGlobalsSpace>
Program littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::program

The documentation for this struct was generated from the following file: