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
subscribeToupdates the functor in place.
-
class NumbaModel : public virtual SysModel
- #include <numbaModel.h>
Base class for Python-defined Numba modules.
NumbaModellets 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 theUpdateStateImplimplementation, 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.
-
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].
-
void (*stateUpdateFunc_)(void**, uint64_t) = nullptr
Compiled Numba state update callback.
-
void addReaderSlot(uintptr_t payloadPtrAddr, uintptr_t linkedAddr, uintptr_t dummyAddr)