Program Listing for File fusion_strategy.h

Return to documentation for file (api/include/pntos/plugins/fusion_strategy.h)

#pragma once

#include <pntos/plugins/common.h>
#include <pntos/plugins/state_modeling.h>

#ifdef __cplusplus
extern "C" {
#endif

PNTOS_ASSUME_NONNULL_BEGIN

typedef struct PntosCommonFusionStrategy {
    PntosManagedMemory* memory;

    PntosFusionType engine_type;

} PntosCommonFusionStrategy;

typedef struct PntosStandardFusionStrategy {
    PntosCommonFusionStrategy common;

    size_t (*get_num_states)(struct PntosStandardFusionStrategy* self);

    size_t (*add_states)(struct PntosStandardFusionStrategy* self,
                         PntosMatrix* initial_estimate,
                         PntosMatrix* initial_covariance,
                         PntosMatrix* PNTOS_NULLABLE cross_covariance);

    void (*remove_states)(struct PntosStandardFusionStrategy* self,
                          size_t first_index,
                          size_t count);

    PntosMatrix* PNTOS_NULLABLE (*get_estimate)(struct PntosStandardFusionStrategy* self);

    void (*set_estimate_slice)(struct PntosStandardFusionStrategy* self,
                               PntosMatrix* new_estimate,
                               size_t first_index);

    PntosMatrix* PNTOS_NULLABLE (*get_covariance)(struct PntosStandardFusionStrategy* self);

    void (*set_covariance_block)(struct PntosStandardFusionStrategy* self,
                                 PntosMatrix* new_covariance,
                                 size_t first_row,
                                 size_t first_col);

    void (*set_covariance_slice)(struct PntosStandardFusionStrategy* self,
                                 PntosMatrix* new_covariance,
                                 size_t first_state);

    void (*propagate)(struct PntosStandardFusionStrategy* self,
                      PntosStandardDynamicsModel* dynamics_model);

    void (*update)(struct PntosStandardFusionStrategy* self,
                   PntosStandardMeasurementModel* measurement_model);

    struct PntosStandardFusionStrategy* (*clone)(struct PntosStandardFusionStrategy* self);
} PntosStandardFusionStrategy;

typedef struct PntosFusionStrategyPlugin {
    PntosCommonPlugin common;

    bool (*is_fusion_type_supported)(struct PntosFusionStrategyPlugin* self, PntosFusionType type);

    PntosCommonFusionStrategy* PNTOS_NULLABLE (*new_fusion_strategy)(
        struct PntosFusionStrategyPlugin* self, PntosFusionType type);
} PntosFusionStrategyPlugin;

PNTOS_ASSUME_NONNULL_END

#ifdef __cplusplus
}
#endif