#[macro_export]
macro_rules! serialize_filtered_pool {
($storage:expr, $t:ty) => {{
if let Some(pool) = $storage.as_any().downcast_ref::<ComponentPool<$t>>() {
let mut transient_pool = ComponentPool::<$t> {
dense_data: Vec::new(),
dense_entities: Vec::new(),
sparse_map: PageMap::new(),
persistence_flags: Vec::new(),
};
for (idx, &is_persistent) in pool.persistence_flags.iter().enumerate() {
if is_persistent {
let entity = pool.dense_entities[idx];
let new_idx = transient_pool.dense_data.len();
transient_pool.dense_data.push(pool.dense_data[idx].clone());
transient_pool.dense_entities.push(entity);
transient_pool.sparse_map.insert(entity.0 as usize, new_idx);
}
}
Some(postcard::to_allocvec(&(
&transient_pool.sparse_map,
&transient_pool.dense_entities,
&transient_pool.dense_data,
)))
} else {
None
}
}};
}