bevy_mod_ffi_host_sys 0.2.0

Low-level FFI bindings for bevy_mod_ffi hosts
Documentation
use bevy::prelude::*;
use bevy_mod_ffi_core::{filtered_entity_mut, query_iter};

use super::SharedQueryIter;

#[unsafe(no_mangle)]
pub unsafe extern "C" fn bevy_query_iter_next(
    iter_ptr: *mut query_iter,
    out_entity_id: *mut u64,
    out_entity: *mut *mut filtered_entity_mut,
) -> bool {
    let shared_iter = unsafe { &mut *(iter_ptr as *mut SharedQueryIter) };

    let entity_mut = match shared_iter.next() {
        Some(e) => e,
        None => return false,
    };
    unsafe {
        *out_entity_id = entity_mut.id().to_bits();
        *out_entity = Box::into_raw(Box::new(entity_mut)) as *mut filtered_entity_mut;
    }

    true
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn bevy_query_iter_drop(iter_ptr: *mut query_iter) {
    let _ = unsafe { Box::from_raw(iter_ptr as *mut SharedQueryIter) };
}