use crate::cpu::synchronization::SYNC_CUBE_STATE_LEN;
use std::{
ffi::c_void,
sync::{Arc, atomic::AtomicU32},
};
#[derive(Default)]
pub struct SharedData {
pub buffer_ptrs: Vec<*mut c_void>,
pub metadata: Vec<u64>,
pub sync_cube_state: [AtomicU32; SYNC_CUBE_STATE_LEN],
pub keepalive: Vec<Box<dyn std::any::Any + Send>>,
}
unsafe impl Send for SharedData {}
unsafe impl Sync for SharedData {}
#[derive(Clone, Default)]
pub struct PlironData {
pub shared: Arc<SharedData>,
pub builtins: [u32; 6],
}
impl PlironData {
pub fn new(
buffer_ptrs: Vec<*mut c_void>,
metadata: Vec<u64>,
cube_count: [u32; 3],
keepalive: Vec<Box<dyn std::any::Any + Send>>,
) -> Self {
Self {
shared: Arc::new(SharedData {
buffer_ptrs,
metadata,
sync_cube_state: Default::default(),
keepalive,
}),
builtins: [cube_count[0], cube_count[1], cube_count[2], 0, 0, 0],
}
}
pub fn set_unit_pos(&mut self, unit_pos: [u32; 3]) {
self.builtins[3] = unit_pos[0];
self.builtins[4] = unit_pos[1];
self.builtins[5] = unit_pos[2];
}
}