1use crate::attributes::Attributes;
2use crate::interning::StringId;
3use crate::location::Location;
4use crate::regions::RegionKey;
5use crate::values::ValueKey;
6use serde::{Deserialize, Serialize};
7use slotmap::new_key_type;
8
9new_key_type! {
10 pub struct OpKey;
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct OperationData {
15 pub name: StringId,
16 pub dialect: StringId,
17 pub inputs: Vec<ValueKey>,
18 pub results: Vec<ValueKey>,
19 pub attrs: Attributes,
20 pub regions: Vec<RegionKey>,
21 pub location: Location,
22 pub parent_block: Option<crate::blocks::BlockKey>,
23}
24
25impl OperationData {
26 pub fn num_inputs(&self) -> usize {
27 self.inputs.len()
28 }
29
30 pub fn num_results(&self) -> usize {
31 self.results.len()
32 }
33
34 pub fn has_regions(&self) -> bool {
35 !self.regions.is_empty()
36 }
37}