pub struct OpToDecoratorIds { /* private fields */ }Expand description
A two-level compressed sparse row (CSR) representation for indexing decorator IDs per operation per node.
This structure provides efficient access to decorator IDs in a hierarchical manner:
- First level: Node -> Operations (operations belong to nodes)
- Second level: Operation -> Decorator IDs (decorator IDs belong to operations)
The data layout follows CSR format at both levels:
-
decorator_idscontains all the DecoratorId values in a single flat array. These are the actual decorator identifiers that need to be accessed. We store them contiguously to minimize memory overhead and improve cache locality when iterating. -
op_indptr_for_dec_idsstores pointer indices that map operations to their position within thedecorator_idsarray. For each operation, it contains the start index where that operation’s decorator IDs begin in the flat storage. -
node_indptr_for_op_idxstores pointer indices that map nodes to their position within theop_indptr_for_dec_idsarray. For each node, it contains the start index where that node’s operation pointers begin.
Together, these three arrays form a two-level index structure that allows efficient lookup of decorator IDs for any operation in any node, while minimizing memory usage for sparse decorator data.
§Example
Consider this COO (Coordinate format) representation:
Node 0, Op 0: [decorator_id_0, decorator_id_1]
Node 0, Op 1: [decorator_id_2]
Node 1, Op 0: [decorator_id_3, decorator_id_4, decorator_id_5]This would be stored as:
decorator_ids: [0, 1, 2, 3, 4, 5]
op_indptr_for_dec_ids: [0, 2, 3, 6] // Node 0: ops [0,2], [2,3]; Node 1: ops [3,6]
node_indptr_for_op_idx: [0, 2, 3] // Node 0: [0,2], Node 1: [2,3]See the unit test test_csr_and_coo_produce_same_elements for a comprehensive example
demonstrating how this encoding works and verifying round-trip conversion from COO to CSR.
Implementations§
Source§impl OpToDecoratorIds
impl OpToDecoratorIds
Sourcepub fn with_capacity(
nodes_capacity: usize,
operations_capacity: usize,
decorator_ids_capacity: usize,
) -> OpToDecoratorIds
pub fn with_capacity( nodes_capacity: usize, operations_capacity: usize, decorator_ids_capacity: usize, ) -> OpToDecoratorIds
Create a new empty OpToDecoratorIds with the specified capacity.
§Arguments
nodes_capacity- Expected number of nodesoperations_capacity- Expected total number of operations across all nodesdecorator_ids_capacity- Expected total number of decorator IDs across all operations
Sourcepub fn new() -> OpToDecoratorIds
pub fn new() -> OpToDecoratorIds
Create a new empty OpToDecoratorIds.
pub fn is_empty(&self) -> bool
Sourcepub fn num_decorator_ids(&self) -> usize
pub fn num_decorator_ids(&self) -> usize
Get the total number of decorator IDs across all operations.
Sourcepub fn add_decorator_info_for_node(
&mut self,
node: MastNodeId,
decorators_info: Vec<(usize, DecoratorId)>,
) -> Result<(), DecoratorIndexError>
pub fn add_decorator_info_for_node( &mut self, node: MastNodeId, decorators_info: Vec<(usize, DecoratorId)>, ) -> Result<(), DecoratorIndexError>
Add decorator information for a node incrementally.
This method allows building up the OpToDecoratorIds structure by adding decorator IDs for nodes in sequential order only.
§Arguments
node- The node ID to add decorator IDs for. Must be the next sequential node.decorators_info- Vector of (operation_index, decorator_id) tuples. The operation indices should be sorted (as guaranteed by validate_decorators). Operations not present in this vector will have no decorator IDs.
§Returns
Ok(()) if successful, Err(DecoratorIndexError) if the node is not the next sequential node.
§Behavior
- Can only add decorator IDs for the next sequential node ID
- Automatically creates empty operations for gaps in operation indices
- Maintains the two-level CSR structure invariant
Sourcepub fn num_decorator_ids_for_operation(
&self,
node: MastNodeId,
operation: usize,
) -> Result<usize, DecoratorIndexError>
pub fn num_decorator_ids_for_operation( &self, node: MastNodeId, operation: usize, ) -> Result<usize, DecoratorIndexError>
Sourcepub fn decorator_ids_for_operation(
&self,
node: MastNodeId,
operation: usize,
) -> Result<&[DecoratorId], DecoratorIndexError>
pub fn decorator_ids_for_operation( &self, node: MastNodeId, operation: usize, ) -> Result<&[DecoratorId], DecoratorIndexError>
Sourcepub fn decorator_ids_for_node(
&self,
node: MastNodeId,
) -> Result<impl Iterator<Item = (usize, &[DecoratorId])>, DecoratorIndexError>
pub fn decorator_ids_for_node( &self, node: MastNodeId, ) -> Result<impl Iterator<Item = (usize, &[DecoratorId])>, DecoratorIndexError>
Sourcepub fn decorator_links_for_node<'a>(
&'a self,
node: MastNodeId,
) -> Result<DecoratedLinks<'a>, DecoratorIndexError>
pub fn decorator_links_for_node<'a>( &'a self, node: MastNodeId, ) -> Result<DecoratedLinks<'a>, DecoratorIndexError>
Named, zero-alloc view flattened to (relative_op_idx, DecoratorId).
Sourcepub fn operation_has_decorator_ids(
&self,
node: MastNodeId,
operation: usize,
) -> Result<bool, DecoratorIndexError>
pub fn operation_has_decorator_ids( &self, node: MastNodeId, operation: usize, ) -> Result<bool, DecoratorIndexError>
Sourcepub fn operation_range_for_node(
&self,
node: MastNodeId,
) -> Result<Range<usize>, DecoratorIndexError>
pub fn operation_range_for_node( &self, node: MastNodeId, ) -> Result<Range<usize>, DecoratorIndexError>
Trait Implementations§
Source§impl Clone for OpToDecoratorIds
impl Clone for OpToDecoratorIds
Source§fn clone(&self) -> OpToDecoratorIds
fn clone(&self) -> OpToDecoratorIds
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OpToDecoratorIds
impl Debug for OpToDecoratorIds
Source§impl Default for OpToDecoratorIds
impl Default for OpToDecoratorIds
Source§fn default() -> OpToDecoratorIds
fn default() -> OpToDecoratorIds
Source§impl<'de> Deserialize<'de> for OpToDecoratorIds
impl<'de> Deserialize<'de> for OpToDecoratorIds
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<OpToDecoratorIds, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<OpToDecoratorIds, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for OpToDecoratorIds
impl PartialEq for OpToDecoratorIds
Source§impl Serialize for OpToDecoratorIds
impl Serialize for OpToDecoratorIds
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl Eq for OpToDecoratorIds
impl StructuralPartialEq for OpToDecoratorIds
Auto Trait Implementations§
impl Freeze for OpToDecoratorIds
impl RefUnwindSafe for OpToDecoratorIds
impl Send for OpToDecoratorIds
impl Sync for OpToDecoratorIds
impl Unpin for OpToDecoratorIds
impl UnwindSafe for OpToDecoratorIds
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more