littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace > Struct Template Reference
juce_blocks_basics » littlefoot

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

## Classes

struct | FunctionExecutionContext

## Public Types

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

## 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 NativeFunction & | getNativeFunction (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...
uint8 * | getProgramAndDataStart () const noexcept
uint8 * | getProgramAndDataEnd () const noexcept
uint32 | getProgramAndDataSize () const noexcept
uint8 * | getProgramHeapStart () const noexcept
uint8 * | getProgramHeapEnd () 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

## Detailed 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

## 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 |

## Constructor & Destructor Documentation

## Runner()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::Runner | ( |  | ) |

noexcept

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

## 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.

References jassert.

## reset()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::reset | ( |  | ) |

noexcept

Clears the memory state.

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::allMemory.

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::Runner().

## clearHeapAndGlobals()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

void littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::clearHeapAndGlobals | ( |  | ) |

noexcept

Clears all the non-program data.

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::allMemory, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataStart(), littlefoot::Program::getProgramSize(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::program.

## getErrorDescription()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

static const char* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getErrorDescription | ( | ErrorCode | e | ) |

static noexcept

Returns a text description for an error code.

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::divisionByZero, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::executionTimedOut, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::illegalAddress, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::ok, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::stackOverflow, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::stackUnderflow, littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::unknownFunction, and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::unknownInstruction.

## 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 | ( |  | ) |

static noexcept

## getProgramAndDataStart()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint8* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataStart | ( |  | ) | const

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::allMemory.

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::clearHeapAndGlobals(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataSize(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setDataByte().

## getProgramAndDataEnd()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint8* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataEnd | ( |  | ) | const

noexcept

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataSize(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapEnd().

## getProgramAndDataSize()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataSize | ( |  | ) | const

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataEnd(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataStart().

## getProgramHeapStart()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint8* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapStart | ( |  | ) | const

noexcept

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapBits(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapByte(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapInt(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapByte(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapInt().

## getProgramHeapEnd()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint8* littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapEnd | ( |  | ) | const

noexcept

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

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapByte(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapByte().

## getProgramHeapSize()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint16 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapSize | ( |  | ) | const

noexcept

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapBits(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapInt(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapInt().

## 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

Sets a byte of data.

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataStart(), littlefoot::Program::getProgramSize(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::program.

## setHeapByte()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

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

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapEnd(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapStart().

## getHeapByte()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint8 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapByte | ( | uint32 | index | ) | const

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapEnd(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapStart().

## getHeapBits()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

uint32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapBits | ( | uint32 | startBit,
|  | uint32 | numBits
| ) |  | const

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapSize(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapStart(), jassertfalse, and readLittleEndianBitsInBuffer().

## setHeapInt()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

int32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setHeapInt | ( | uint32 | byteOffset,
|  | uint32 | value
| ) |  |

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapSize(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapStart(), and littlefoot::Program::writeInt32().

## getHeapInt()

template<int programAndHeapSpace, int stackAndGlobalsSpace>

int32 littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getHeapInt | ( | uint32 | byteOffset | ) | const

noexcept

References littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapSize(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramHeapStart(), and littlefoot::Program::readInt32().

## Member Data Documentation

## totalProgramAndHeapSpace

template<int programAndHeapSpace, int stackAndGlobalsSpace>

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

static constexpr

## totalStackAndGlobalsSpace

template<int programAndHeapSpace, int stackAndGlobalsSpace>

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

static constexpr

## allMemory

template<int programAndHeapSpace, int stackAndGlobalsSpace>

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

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::clearHeapAndGlobals(), littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::getProgramAndDataStart(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::reset().

## program

template<int programAndHeapSpace, int stackAndGlobalsSpace>

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

Referenced by littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::clearHeapAndGlobals(), and littlefoot::Runner< programAndHeapSpace, stackAndGlobalsSpace >::setDataByte().

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

- juce_LittleFootRunner.h