Struct midenc_hir::OrderedArenaMap

source ·
pub struct OrderedArenaMap<K: EntityRef, V> { /* private fields */ }
Expand description

OrderedArenaMap is an extension of ArenaMap that provides for arbitrary ordering of keys/values

This is done using an intrusive linked list alongside an ArenaMap. The list is used to link one key/value pair to the next, so any ordering you wish to implement is possible. This is particularly useful for layout of blocks in a function, or instructions within blocks, as you can precisely position them relative to other blocks/instructions.

Because the linked list is intrusive, it is virtually free in terms of space, but comes with the standard overhead for traversals. That said, there are a couple of niceties that give it good overall performance:

  • It is a doubly-linked list, so you can traverse equally efficiently front-to-back or back-to-front,
  • It has O(1) indexing; given a key, we can directly obtain a reference to a node, and with that, obtain a cursor over the list starting at that node.

Implementations§

source§

impl<K: EntityRef, V> OrderedArenaMap<K, V>

source

pub fn new() -> Self

source

pub fn is_empty(&self) -> bool

Returns true if this OrderedArenaMap is empty

source

pub fn len(&self) -> usize

Returns the total number of actively linked items in the map

source

pub fn contains(&self, key: K) -> bool

Returns true if this map contains the given key and its value has been linked

source

pub fn get(&self, key: K) -> Option<&V>

Returns a reference to the value associated with the given key, if present and linked

source

pub fn get_mut(&mut self, key: K) -> Option<&mut V>

Returns a mutable reference to the value associated with the given key, if present and linked

source

pub fn create(&mut self) -> K

Allocates a key, but does not link the data

source

pub fn append(&mut self, key: K, value: V)

Used with create when ready to associate data with the allocated key, linking it in to the end of the list

source

pub fn insert_before(&mut self, key: K, before: K, value: V)

Like append, but inserts the node before before in the list

NOTE: This function will panic if before is not present in the list

source

pub fn insert_after(&mut self, key: K, after: K, value: V)

Like append, but inserts the node after after in the list

NOTE: This function will panic if after is not present in the list

source

pub fn push(&mut self, value: V) -> K

Allocates a key and links data in the same operation

source

pub fn push_after(&mut self, after: K, value: V) -> K

Like push, but inserts the node after after in the list

NOTE: This function will panic if after is not present in the list

source

pub fn remove(&mut self, key: K)

Unlinks the value associated with the given key from this map

NOTE: Removal does not result in deallocation of the underlying data, this happens when the map is dropped. To perform early garbage collection, you can clone the map, and drop the original.

source

pub fn first(&self) -> Option<&LayoutNode<K, V>>

Returns the first node in the map

source

pub fn last(&self) -> Option<&LayoutNode<K, V>>

Returns the last node in the map

source

pub fn cursor(&self) -> Cursor<'_, LayoutAdapter<K, V>>

Returns a cursor which can be used to traverse the map in order (front to back)

source

pub fn cursor_mut(&mut self) -> CursorMut<'_, LayoutAdapter<K, V>>

Returns a cursor which can be used to traverse the map mutably, in order (front to back)

source

pub fn cursor_at(&self, key: K) -> Cursor<'_, LayoutAdapter<K, V>>

Returns a cursor which can be used to traverse the map in order (front to back), starting at the key given.

source

pub fn cursor_mut_at(&mut self, key: K) -> CursorMut<'_, LayoutAdapter<K, V>>

Returns a cursor which can be used to traverse the map mutably, in order (front to back), starting at the key given.

source

pub fn iter(&self) -> OrderedArenaMapIter<'_, K, V>

Returns an iterator over the key/value pairs in the map.

The iterator is double-ended, so can be used to traverse the map front-to-back, or back-to-front

source

pub fn keys(&self) -> impl Iterator<Item = K> + '_

Returns an iterator over the keys in the map, in order (front to back)

source

pub fn values(&self) -> impl Iterator<Item = &V>

Returns an iterator over the values in the map, in order (front to back)

Trait Implementations§

source§

impl<K: EntityRef, V: Clone> Clone for OrderedArenaMap<K, V>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: EntityRef, V> Default for OrderedArenaMap<K, V>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<K: EntityRef, V> Drop for OrderedArenaMap<K, V>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<K: EntityRef, V> Index<K> for OrderedArenaMap<K, V>

source§

type Output = V

The returned type after indexing.
source§

fn index(&self, index: K) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl<K: EntityRef, V> IndexMut<K> for OrderedArenaMap<K, V>

source§

fn index_mut(&mut self, index: K) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more

Auto Trait Implementations§

§

impl<K, V> !Freeze for OrderedArenaMap<K, V>

§

impl<K, V> !RefUnwindSafe for OrderedArenaMap<K, V>

§

impl<K, V> !Send for OrderedArenaMap<K, V>

§

impl<K, V> !Sync for OrderedArenaMap<K, V>

§

impl<K, V> Unpin for OrderedArenaMap<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> !UnwindSafe for OrderedArenaMap<K, V>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<D> OwoColorize for D

source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text italicized
Make the text blink
Make the text blink (but fast!)
source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more