use crate::{
infrastructure::{instance::InstanceHandle, time::Time, type_support::TypeSupport},
xtypes::dynamic_type::DynamicData,
};
#[derive(Debug, PartialEq)]
pub struct Sample<Foo> {
pub data: Option<Foo>,
pub sample_info: SampleInfo,
}
impl<Foo> Sample<Foo>
where
Foo: TypeSupport,
{
pub(crate) fn new(data: Option<DynamicData>, sample_info: SampleInfo) -> Self {
Self {
data: data.map(Foo::create_sample),
sample_info,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum SampleStateKind {
Read,
NotRead,
}
pub const ANY_SAMPLE_STATE: &[SampleStateKind] = &[SampleStateKind::Read, SampleStateKind::NotRead];
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum ViewStateKind {
New,
NotNew,
}
pub const ANY_VIEW_STATE: &[ViewStateKind] = &[ViewStateKind::New, ViewStateKind::NotNew];
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum InstanceStateKind {
Alive,
NotAliveDisposed,
NotAliveNoWriters,
}
pub const ANY_INSTANCE_STATE: &[InstanceStateKind] = &[
InstanceStateKind::Alive,
InstanceStateKind::NotAliveDisposed,
InstanceStateKind::NotAliveNoWriters,
];
pub const NOT_ALIVE_INSTANCE_STATE: &[InstanceStateKind] = &[
InstanceStateKind::NotAliveDisposed,
InstanceStateKind::NotAliveNoWriters,
];
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct SampleInfo {
pub sample_state: SampleStateKind,
pub view_state: ViewStateKind,
pub instance_state: InstanceStateKind,
pub disposed_generation_count: i32,
pub no_writers_generation_count: i32,
pub sample_rank: i32,
pub generation_rank: i32,
pub absolute_generation_rank: i32,
pub source_timestamp: Option<Time>,
pub instance_handle: InstanceHandle,
pub publication_handle: InstanceHandle,
pub valid_data: bool,
}