Cluster add-building compact dispatch families
This commit is contained in:
parent
8828d510fb
commit
d334da6687
4 changed files with 435 additions and 0 deletions
|
|
@ -3988,6 +3988,12 @@ pub struct SmpLoadedEventRuntimeCollectionSummary {
|
|||
#[serde(default)]
|
||||
pub add_building_dispatch_strip_records_missing_trigger_kind: usize,
|
||||
#[serde(default)]
|
||||
pub add_building_dispatch_strip_signature_families: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub add_building_dispatch_strip_condition_tuple_families: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub add_building_dispatch_strip_signature_condition_clusters: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub control_lane_notes: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub records: Vec<SmpLoadedPackedEventRecordSummary>,
|
||||
|
|
@ -9989,6 +9995,54 @@ fn parse_event_runtime_collection_summary_with_tag_width(
|
|||
.collect::<Vec<_>>();
|
||||
add_building_dispatch_strip_descriptor_labels.sort_unstable();
|
||||
add_building_dispatch_strip_descriptor_labels.dedup();
|
||||
let mut add_building_dispatch_strip_signature_families = records
|
||||
.iter()
|
||||
.filter(|record| {
|
||||
record.grouped_effect_rows.iter().any(|row| {
|
||||
opcode_reaches_world_apply_compact_runtime_effect_dispatch_strip(row.opcode)
|
||||
&& compact_event_dispatch_add_building_descriptor_id(row.descriptor_id)
|
||||
})
|
||||
})
|
||||
.map(|record| {
|
||||
compact_event_signature_family_from_notes(&record.notes)
|
||||
.unwrap_or_else(|| "unknown-signature-family".to_string())
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
add_building_dispatch_strip_signature_families.sort_unstable();
|
||||
add_building_dispatch_strip_signature_families.dedup();
|
||||
let mut add_building_dispatch_strip_condition_tuple_families = records
|
||||
.iter()
|
||||
.filter(|record| {
|
||||
record.grouped_effect_rows.iter().any(|row| {
|
||||
opcode_reaches_world_apply_compact_runtime_effect_dispatch_strip(row.opcode)
|
||||
&& compact_event_dispatch_add_building_descriptor_id(row.descriptor_id)
|
||||
})
|
||||
})
|
||||
.map(|record| {
|
||||
compact_event_dispatch_condition_tuple_family_from_summary_rows(
|
||||
&record.standalone_condition_rows,
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
add_building_dispatch_strip_condition_tuple_families.sort_unstable();
|
||||
add_building_dispatch_strip_condition_tuple_families.dedup();
|
||||
let mut add_building_dispatch_strip_signature_condition_clusters = records
|
||||
.iter()
|
||||
.filter(|record| {
|
||||
record.grouped_effect_rows.iter().any(|row| {
|
||||
opcode_reaches_world_apply_compact_runtime_effect_dispatch_strip(row.opcode)
|
||||
&& compact_event_dispatch_add_building_descriptor_id(row.descriptor_id)
|
||||
})
|
||||
})
|
||||
.map(|record| {
|
||||
compact_event_dispatch_signature_condition_cluster_from_summary_rows(
|
||||
compact_event_signature_family_from_notes(&record.notes).as_deref(),
|
||||
&record.standalone_condition_rows,
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
add_building_dispatch_strip_signature_condition_clusters.sort_unstable();
|
||||
add_building_dispatch_strip_signature_condition_clusters.dedup();
|
||||
let mut mutation_candidate_unknown_descriptor_ids = records
|
||||
.iter()
|
||||
.flat_map(|record| record.grouped_effect_rows.iter())
|
||||
|
|
@ -10120,6 +10174,18 @@ fn parse_event_runtime_collection_summary_with_tag_width(
|
|||
"decoded Add Building descriptor labels present in the 0x00431b20 dispatch strip = {:?}",
|
||||
add_building_dispatch_strip_descriptor_labels
|
||||
));
|
||||
control_lane_notes.push(format!(
|
||||
"Add Building signature families present in the 0x00431b20 dispatch strip = {:?}",
|
||||
add_building_dispatch_strip_signature_families
|
||||
));
|
||||
control_lane_notes.push(format!(
|
||||
"Add Building condition-tuple families present in the 0x00431b20 dispatch strip = {:?}",
|
||||
add_building_dispatch_strip_condition_tuple_families
|
||||
));
|
||||
control_lane_notes.push(format!(
|
||||
"Add Building signature/condition clusters present in the 0x00431b20 dispatch strip = {:?}",
|
||||
add_building_dispatch_strip_signature_condition_clusters
|
||||
));
|
||||
if add_building_dispatch_strip_records_with_trigger_kind == 0 {
|
||||
control_lane_notes.push(
|
||||
"every currently decoded Add Building dispatch-strip row still has null trigger kind, so the missing control-lane mapping remains the blocker above the already-grounded add-building descriptor bridge".to_string(),
|
||||
|
|
@ -10157,6 +10223,9 @@ fn parse_event_runtime_collection_summary_with_tag_width(
|
|||
add_building_dispatch_strip_descriptor_labels,
|
||||
add_building_dispatch_strip_records_with_trigger_kind,
|
||||
add_building_dispatch_strip_records_missing_trigger_kind,
|
||||
add_building_dispatch_strip_signature_families,
|
||||
add_building_dispatch_strip_condition_tuple_families,
|
||||
add_building_dispatch_strip_signature_condition_clusters,
|
||||
control_lane_notes,
|
||||
records,
|
||||
});
|
||||
|
|
@ -10173,6 +10242,40 @@ fn compact_event_dispatch_add_building_descriptor_id(descriptor_id: u32) -> bool
|
|||
(503..=613).contains(&descriptor_id)
|
||||
}
|
||||
|
||||
fn compact_event_signature_family_from_notes(notes: &[String]) -> Option<String> {
|
||||
notes.iter().find_map(|note| {
|
||||
note.strip_prefix("compact signature family = ")
|
||||
.map(ToString::to_string)
|
||||
})
|
||||
}
|
||||
|
||||
fn compact_event_dispatch_condition_tuple_family_from_summary_rows(
|
||||
rows: &[SmpLoadedPackedEventConditionRowSummary],
|
||||
) -> String {
|
||||
if rows.is_empty() {
|
||||
return "[]".to_string();
|
||||
}
|
||||
let parts = rows
|
||||
.iter()
|
||||
.map(|row| match &row.metric {
|
||||
Some(metric) => format!("{}:{}:{}", row.raw_condition_id, row.subtype, metric),
|
||||
None => format!("{}:{}", row.raw_condition_id, row.subtype),
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
format!("[{}]", parts.join(","))
|
||||
}
|
||||
|
||||
fn compact_event_dispatch_signature_condition_cluster_from_summary_rows(
|
||||
signature_family: Option<&str>,
|
||||
rows: &[SmpLoadedPackedEventConditionRowSummary],
|
||||
) -> String {
|
||||
format!(
|
||||
"{} :: {}",
|
||||
signature_family.unwrap_or("unknown-signature-family"),
|
||||
compact_event_dispatch_condition_tuple_family_from_summary_rows(rows)
|
||||
)
|
||||
}
|
||||
|
||||
fn known_special_condition_label_for_compact_descriptor_id(
|
||||
descriptor_id: u32,
|
||||
) -> Option<&'static str> {
|
||||
|
|
@ -23066,6 +23169,21 @@ mod tests {
|
|||
.expect("non-direct event runtime collection summary should parse");
|
||||
|
||||
assert_eq!(summary.add_building_dispatch_strip_record_indexes, vec![0]);
|
||||
assert_eq!(
|
||||
summary.add_building_dispatch_strip_signature_families,
|
||||
vec!["nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff".to_string()]
|
||||
);
|
||||
assert_eq!(
|
||||
summary.add_building_dispatch_strip_condition_tuple_families,
|
||||
vec!["[-1:4]".to_string()]
|
||||
);
|
||||
assert_eq!(
|
||||
summary.add_building_dispatch_strip_signature_condition_clusters,
|
||||
vec![
|
||||
"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff :: [-1:4]"
|
||||
.to_string()
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
summary.add_building_dispatch_strip_descriptor_labels,
|
||||
vec!["Add Building Port01".to_string()]
|
||||
|
|
@ -23088,6 +23206,21 @@ mod tests {
|
|||
"decoded Add Building descriptor labels present in the 0x00431b20 dispatch strip = [\"Add Building Port01\"]",
|
||||
)
|
||||
}));
|
||||
assert!(summary.control_lane_notes.iter().any(|line| {
|
||||
line.contains(
|
||||
"Add Building signature families present in the 0x00431b20 dispatch strip = [\"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff\"]",
|
||||
)
|
||||
}));
|
||||
assert!(summary.control_lane_notes.iter().any(|line| {
|
||||
line.contains(
|
||||
"Add Building condition-tuple families present in the 0x00431b20 dispatch strip = [\"[-1:4]\"]",
|
||||
)
|
||||
}));
|
||||
assert!(summary.control_lane_notes.iter().any(|line| {
|
||||
line.contains(
|
||||
"Add Building signature/condition clusters present in the 0x00431b20 dispatch strip = [\"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff :: [-1:4]\"]",
|
||||
)
|
||||
}));
|
||||
assert!(summary.control_lane_notes.iter().any(|line| {
|
||||
line.contains("every currently decoded Add Building dispatch-strip row still has null trigger kind")
|
||||
}));
|
||||
|
|
@ -25872,6 +26005,9 @@ mod tests {
|
|||
add_building_dispatch_strip_descriptor_labels: vec![],
|
||||
add_building_dispatch_strip_records_with_trigger_kind: 0,
|
||||
add_building_dispatch_strip_records_missing_trigger_kind: 0,
|
||||
add_building_dispatch_strip_signature_families: vec![],
|
||||
add_building_dispatch_strip_condition_tuple_families: vec![],
|
||||
add_building_dispatch_strip_signature_condition_clusters: vec![],
|
||||
control_lane_notes: vec![],
|
||||
records: build_unsupported_event_runtime_record_summaries(&[1, 3, 5], "test summary"),
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue