use crate::messages::*;
use crate::utilities::*;
use hashbrown::HashMap;
use std::fmt::Debug;
use std::hash::Hash;
#[derive(Debug)]
pub(crate) struct Condense {
pub(crate) names_only: bool,
pub(crate) merge_instances: bool,
pub(crate) final_replaced: bool,
}
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Debug)]
pub(crate) struct TerseMessage {
pub(crate) order: MessageOrder,
pub(crate) source_index: usize,
pub(crate) target_index: usize,
pub(crate) payload: String,
pub(crate) replaced: Option<String>,
}
#[derive(Clone, Debug)]
pub(crate) struct AgentTimelines {
pub(crate) left: Vec<usize>,
pub(crate) right: Vec<usize>,
}
#[derive(Clone, Debug)]
pub(crate) struct SequenceState<
MessageId: IndexLike,
const MAX_AGENTS: usize,
const MAX_MESSAGES: usize,
> {
pub(crate) timelines: Vec<Option<MessageId>>,
pub(crate) message_timelines: HashMap<MessageId, usize>,
pub(crate) agents_timelines: Vec<AgentTimelines>,
pub(crate) has_reactivation_message: bool,
}
#[derive(Copy, Clone, Debug)]
pub(crate) enum SequenceStep<StateId: IndexLike, MessageId: IndexLike> {
NoStep,
Received {
source_index: usize,
target_index: usize,
is_activity: bool,
did_change_state: bool,
message_id: MessageId,
},
Emitted {
source_index: usize,
target_index: usize,
message_id: MessageId,
replaced: Option<MessageId>,
is_immediate: bool,
},
Passed {
source_index: usize,
target_index: usize,
target_did_change_state: bool,
message_id: MessageId,
replaced: Option<MessageId>,
},
NewState {
agent_index: usize,
state_id: StateId,
is_deferring: bool,
},
NewStates {
first_agent_index: usize,
first_state_id: StateId,
first_is_deferring: bool,
second_agent_index: usize,
second_state_id: StateId,
second_is_deferring: bool,
},
}