use alloc::vec::Vec;
use core::ops::Range;
use bevy::prelude::*;
use postcard::experimental::serialized_size;
pub(super) struct EntityRanges {
pub(super) entity: Range<usize>,
pub(super) data: Vec<Range<usize>>,
}
impl EntityRanges {
pub(super) fn size(&self) -> Result<usize> {
let data_size = self.data_size();
let len_size = serialized_size(&data_size)?;
Ok(self.entity.len() + len_size + data_size)
}
pub(super) fn data_size(&self) -> usize {
self.data.iter().map(|range| range.len()).sum()
}
pub(super) fn add_data(&mut self, data: Range<usize>) {
if let Some(last) = self.data.last_mut() {
if last.end == data.start {
last.end = data.end;
return;
}
}
self.data.push(data);
}
pub(super) fn extend(&mut self, other: &Self) {
self.data.extend(other.data.iter().cloned());
}
}