diffsl 0.11.9

A compiler for a domain-specific language for ordinary differential equations (ODE).
Documentation
use std::collections::HashMap;

use anyhow::Result;
use target_lexicon::Triple;

use crate::{
    discretise::DiscreteModel,
    execution::{compiler::CompilerOptions, scalar::RealType},
};

pub trait CodegenModule: Sized + Send + Sync + 'static {}

pub trait CodegenModuleCompile: CodegenModule {
    fn from_discrete_model(
        model: &DiscreteModel,
        options: CompilerOptions,
        triple: Option<Triple>,
        real_type: RealType,
        code: Option<&str>,
    ) -> Result<Self>;
}

pub trait CodegenModuleLink: CodegenModule {
    fn from_object(buffer: &[u8]) -> Result<Self>;
}

pub trait CodegenModuleJit: CodegenModule {
    fn jit(&mut self) -> Result<HashMap<String, *const u8>>;
}

pub trait CodegenModuleEmit: CodegenModule {
    fn to_object(&self) -> Result<Vec<u8>>;
}