numbaModel

struct ReaderSlot
#include <numbaModel.h>

Bookkeeping for one registered ReadFunctor.

All three addresses remain valid for the lifetime of the corresponding Python attribute because subscribeTo updates the functor in place.

Public Members

void **payloadPtrAddr

Address of ReadFunctor::payloadPointer.

uint8_t *linkedAddr

Address of ReadFunctor::initialized.

void *dummy

Zero-filled fallback payload used when not linked.

class NumbaModel : public virtual SysModel
#include <numbaModel.h>

Base class for Python-defined Numba modules.

NumbaModel lets Python subclasses register message readers, message writers, and auxiliary buffers, then exposes them to a compiled Numba callback through a flat pointer array. The Python layer owns the UpdateStateImpl implementation, while this C++ class refreshes the read pointers, updates message headers, and invokes the compiled callback every simulation tick.

Public Functions

void addReaderSlot(uintptr_t payloadPtrAddr, uintptr_t linkedAddr, uintptr_t dummyAddr)

Register a reader functor for dynamic payload refresh.

Parameters:
  • payloadPtrAddr – Address of the functor payload pointer storage.

  • linkedAddr – Address of the functor linked-flag storage.

  • dummyAddr – Address of the fallback payload used when unlinked.

void addWritePayloadPtr(uintptr_t ptr)

Register one writable payload pointer in the flattened pointer table.

Parameters:

ptr – Raw payload pointer address.

void addWriteHeaderPtr(uintptr_t ptr)

Register one writable message-header pointer.

Parameters:

ptr – Raw message-header pointer address.

void addUserPointer(uintptr_t ptr)

Register one user-owned pointer in the flattened pointer table.

Parameters:

ptr – Raw user pointer address.

void setStateUpdateFunc(uintptr_t funcPtr)

Store the compiled Numba update function pointer.

Parameters:

funcPtr – Raw function pointer returned by Numba.

uintptr_t getReadLinkedPtr() const

Return the raw address of the readLinked_ backing buffer.

This buffer is typically registered once as a user pointer so the compiled callback can inspect reader linkage state.

void finalizeAllPtrs()

Assemble the flattened pointer table consumed by the compiled callback.

This must be called from Python Reset() after _nbm_compile() finishes registering all reader, writer, and user pointers.

virtual void Reset(uint64_t CurrentSimNanos) override

Prepare the model for a new simulation run.

Parameters:

CurrentSimNanos – Current simulation time in nanoseconds.

virtual void UpdateState(uint64_t CurrentSimNanos) override

Refresh registered pointers and invoke the compiled callback.

Parameters:

CurrentSimNanos – Current simulation time in nanoseconds.

Public Members

BSKLogger bskLogger

Logger proxy exposed to Python-side Numba modules.

Protected Attributes

std::vector<ReaderSlot> readerSlots_

One entry per registered reader functor.

std::vector<uint8_t> readLinked_

Per-reader linkage flags refreshed each tick.

size_t readCount_ = 0

Number of reader entries stored in allPtrs_.

std::vector<void*> writePayloads_

Staged writable payload pointers awaiting finalization.

std::vector<void*> userPointers_

Staged user pointers appended after readers and writers.

std::vector<void*> allPtrs_

Flat pointer table laid out as [reads | writes | user].

std::vector<MsgHeader*> writeHeaders_

Headers corresponding to registered writable payloads.

void (*stateUpdateFunc_)(void**, uint64_t) = nullptr

Compiled Numba state update callback.