use crate::types::{Fraction, Microns, PackedPosition, VoxelCoord};
#[inline]
pub fn um_to_voxel(um: Microns, voxel_size_um: u32) -> VoxelCoord {
(um / voxel_size_um as Microns) as VoxelCoord
}
#[inline]
pub fn pct_to_voxel(pct: Fraction, world_dim_vox: u32) -> VoxelCoord {
(pct * world_dim_vox as Fraction) as VoxelCoord
}
#[inline]
pub fn voxel_to_um(vox: VoxelCoord, voxel_size_um: u32) -> Microns {
vox as Microns * voxel_size_um as Microns
}
#[inline]
pub fn pack_position(x: u32, y: u32, z: u32, type_mask: u32) -> PackedPosition {
PackedPosition::new(x, y, z, type_mask as u8)
}
#[inline]
pub fn unpack_position(p: PackedPosition) -> (u32, u32, u32, u32) {
(p.x() as u32, p.y() as u32, p.z() as u32, p.type_id() as u32)
}
use crate::layout::{pack_dendrite_target, unpack_axon_id, unpack_segment_offset};
use crate::types::PackedTarget;
#[inline]
pub fn pack_target(axon_id: u32, segment_idx: u32) -> PackedTarget {
pack_dendrite_target(axon_id, segment_idx)
}
#[inline]
pub fn unpack_target(t: PackedTarget) -> Option<(u32, u32)> {
if t == 0 {
return None;
}
Some((unpack_axon_id(t), unpack_segment_offset(t)))
}