FERS 1.0.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
FersContext Class Reference

Manages the lifetime and state of a single FERS simulation scenario. More...

#include "fers_context.h"

+ Inheritance diagram for FersContext:

Public Member Functions

 FersContext ()
 Constructs a new simulation context, initializing an empty world.
 
core::WorldgetWorld () const noexcept
 Retrieves a pointer to the simulation world.
 
std::mt19937 & getMasterSeeder () noexcept
 Retrieves a mutable reference to the master random number seeder.
 
void setOutputDir (std::string dir)
 Sets the output directory for simulation results.
 
const std::string & getOutputDir () const noexcept
 Gets the output directory for simulation results.
 
void setLastOutputMetadata (core::OutputMetadata metadata)
 
void clearLastOutputMetadata ()
 
std::string getLastOutputMetadataJson () const
 

Detailed Description

Manages the lifetime and state of a single FERS simulation scenario.

This class serves as the C++ backend for the opaque fers_context_t handle exposed by the C-API. The primary reason for its existence is to apply the "Pimpl" (Pointer to Implementation) idiom at the ABI boundary. By hiding the C++ standard library types (std::unique_ptr, std::mt19937) and the full definition of core::World from the C header, we create a stable ABI that does not break when the internal C++ implementation changes. This encapsulation ensures that clients of the C-API (like Rust) do not need to be recompiled if only the library's internals are modified.

Its secondary role is to own the core::World object, which represents the entire scenario, and the master random number generator. This guarantees that the simulation state persists in memory between API calls and that randomness can be controlled deterministically from a single source.

Definition at line 33 of file fers_context.h.

Constructor & Destructor Documentation

◆ FersContext()

FersContext::FersContext ( )

Constructs a new simulation context, initializing an empty world.

The master random number generator is default-constructed. This is a deliberate choice to allow the seed to be configured later, typically after parsing a scenario file. This ensures that the scenario itself can define its own seed for reproducible simulations. If no seed is provided, a random one is generated at load time.

Definition at line 46 of file fers_context.h.

46: _world(std::make_unique<core::World>()) {}

Member Function Documentation

◆ clearLastOutputMetadata()

void FersContext::clearLastOutputMetadata ( )

Definition at line 80 of file fers_context.h.

80{ _last_output_metadata = core::OutputMetadata{}; }

◆ getLastOutputMetadataJson()

std::string FersContext::getLastOutputMetadataJson ( ) const

Definition at line 82 of file fers_context.h.

83 {
84 return core::outputMetadataToJsonString(_last_output_metadata);
85 }
std::string outputMetadataToJsonString(const OutputMetadata &metadata)

References core::outputMetadataToJsonString().

Referenced by fers_get_last_output_metadata_json().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMasterSeeder()

std::mt19937 & FersContext::getMasterSeeder ( )
noexcept

Retrieves a mutable reference to the master random number seeder.

A single master generator is used to seed all other random number generators within the simulation (e.g., for noise models, RCS fluctuations). This design is crucial for ensuring that a simulation can be made fully deterministic and reproducible by controlling a single seed value at the top level.

Returns
A reference to the std::mt19937 engine.

Definition at line 66 of file fers_context.h.

66{ return _master_seeder; }

◆ getOutputDir()

const std::string & FersContext::getOutputDir ( ) const
noexcept

Gets the output directory for simulation results.

Definition at line 76 of file fers_context.h.

76{ return _output_dir; }

◆ getWorld()

core::World * FersContext::getWorld ( ) const
noexcept

Retrieves a pointer to the simulation world.

This provides direct, mutable access to the in-memory representation of the scenario, allowing API functions to modify it.

Returns
A non-owning pointer to the core::World object.

Definition at line 54 of file fers_context.h.

54{ return _world.get(); }

Referenced by fers_update_platform_from_json(), fers_update_receiver_from_json(), fers_update_target_from_json(), and fers_update_transmitter_from_json().

+ Here is the caller graph for this function:

◆ setLastOutputMetadata()

void FersContext::setLastOutputMetadata ( core::OutputMetadata  metadata)

Definition at line 78 of file fers_context.h.

78{ _last_output_metadata = std::move(metadata); }

◆ setOutputDir()

void FersContext::setOutputDir ( std::string  dir)

Sets the output directory for simulation results.

Definition at line 71 of file fers_context.h.

71{ _output_dir = std::move(dir); }

Referenced by fers_set_output_directory().

+ Here is the caller graph for this function:

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