Vec

Struct Vec 

Source
pub struct Vec<'alloc, T>(/* private fields */);
Expand description

A Vec without Drop, which stores its data in the arena allocator.

§No Drops

Objects allocated into Oxc memory arenas are never Dropped. Memory is released in bulk when the allocator is dropped, without dropping the individual objects in the arena.

Therefore, it would produce a memory leak if you allocated Drop types into the arena which own memory allocations outside the arena.

Static checks make this impossible to do. Vec::new_in and all other methods which create a Vec will refuse to compile if called with a Drop type.

Implementations§

Source§

impl<'alloc, T> Vec<'alloc, T>

Source

pub fn new_in(allocator: &'alloc Allocator) -> Vec<'alloc, T>

Constructs a new, empty Vec<T>.

The vector will not allocate until elements are pushed onto it.

§Examples
use oxc_allocator::{Allocator, Vec};

let arena = Allocator::default();

let mut vec: Vec<i32> = Vec::new_in(&arena);
assert!(vec.is_empty());
Source

pub fn with_capacity_in( capacity: usize, allocator: &'alloc Allocator, ) -> Vec<'alloc, T>

Constructs a new, empty Vec<T> with at least the specified capacity with the provided allocator.

The vector will be able to hold at least capacity elements without reallocating. This method is allowed to allocate for more elements than capacity. If capacity is 0, the vector will not allocate.

It is important to note that although the returned vector has the minimum capacity specified, the vector will have a zero length.

For Vec<T> where T is a zero-sized type, there will be no allocation and the capacity will always be u32::MAX.

§Panics

Panics if the new capacity exceeds isize::MAX bytes.

§Examples
use oxc_allocator::{Allocator, Vec};

let arena = Allocator::default();

let mut vec = Vec::with_capacity_in(10, &arena);

// The vector contains no items, even though it has capacity for more
assert_eq!(vec.len(), 0);
assert_eq!(vec.capacity(), 10);

// These are all done without reallocating...
for i in 0..10 {
    vec.push(i);
}
assert_eq!(vec.len(), 10);
assert_eq!(vec.capacity(), 10);

// ...but this may make the vector reallocate
vec.push(11);
assert_eq!(vec.len(), 11);
assert!(vec.capacity() >= 11);

// A vector of a zero-sized type will always over-allocate, since no
// allocation is necessary
let vec_units = Vec::<()>::with_capacity_in(10, &arena);
assert_eq!(vec_units.capacity(), usize::MAX);
Source

pub fn from_iter_in<I>(iter: I, allocator: &'alloc Allocator) -> Vec<'alloc, T>
where I: IntoIterator<Item = T>,

Create a new Vec whose elements are taken from an iterator and allocated in the given allocator.

This is behaviorially identical to FromIterator::from_iter.

Source

pub fn from_array_in<const N: usize>( array: [T; N], allocator: &'alloc Allocator, ) -> Vec<'alloc, T>

Create a new Vec from a fixed-size array, allocated in the given allocator.

This is preferable to from_iter_in where source is an array, as size is statically known, and compiler is more likely to construct the values directly in arena, rather than constructing on stack and then copying to arena.

§Examples
use oxc_allocator::{Allocator, Vec};

let allocator = Allocator::default();

let array: [u32; 4] = [1, 2, 3, 4];
let vec = Vec::from_array_in(array, &allocator);

Trait Implementations§

Source§

impl<'new_alloc, T, C> CloneIn<'new_alloc> for Vec<'_, T>
where T: CloneIn<'new_alloc, Cloned = C>, C: 'new_alloc,

Source§

type Cloned = Vec<'new_alloc, C>

The type of the cloned object. Read more
Source§

fn clone_in( &self, allocator: &'new_alloc Allocator, ) -> <Vec<'_, T> as CloneIn<'new_alloc>>::Cloned

Clone self into the given allocator. allocator may be the same one that self is already in.
Source§

fn clone_in_with_semantic_ids( &self, allocator: &'new_alloc Allocator, ) -> <Vec<'_, T> as CloneIn<'new_alloc>>::Cloned

Almost identical as clone_in, but for some special type, it will also clone the semantic ids. Please use this method only if you make sure semantic info is synced with the ast node.
Source§

impl<T> ConcatElement for Vec<'_, T>
where T: ESTree,

Source§

impl<T> ContentEq for Vec<'_, T>
where T: ContentEq,

Blanket implementation for oxc_allocator::Vec types

§Warning

This implementation is slow compared to PartialEq for native types which are Copy (e.g. u32). Prefer comparing the 2 vectors using == if they contain such native types (e.g. Vec<u32>). https://godbolt.org/z/54on5sMWc

Source§

fn content_eq(&self, other: &Vec<'_, T>) -> bool

This method tests for contents of self and other to be equal.
Source§

fn content_ne(&self, other: &Self) -> bool

This method tests for contents of self and other not to be equal. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> Debug for Vec<'_, T>
where T: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'alloc, T> Deref for Vec<'alloc, T>

Source§

type Target = Vec<'alloc, T, Bump>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &<Vec<'alloc, T> as Deref>::Target

Dereferences the value.
Source§

impl<'alloc, T> DerefMut for Vec<'alloc, T>

Source§

fn deref_mut(&mut self) -> &mut Vec<'alloc, T, Bump>

Mutably dereferences the value.
Source§

impl<'a, T> Dummy<'a> for Vec<'a, T>

Source§

fn dummy(allocator: &'a Allocator) -> Vec<'a, T>

Create a dummy Vec.

Source§

impl<T> ESTree for Vec<'_, T>
where T: ESTree,

Source§

fn serialize<S>(&self, serializer: S)
where S: Serializer,

Source§

impl<T> Hash for Vec<'_, T>
where T: Hash,

Source§

fn hash<H>(&self, state: &mut H)
where H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T, I> Index<I> for Vec<'_, T>
where I: SliceIndex<[T]>,

Source§

type Output = <I as SliceIndex<[T]>>::Output

The returned type after indexing.
Source§

fn index(&self, index: I) -> &<Vec<'_, T> as Index<I>>::Output

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

impl<T, I> IndexMut<I> for Vec<'_, T>
where I: SliceIndex<[T]>,

Source§

fn index_mut(&mut self, index: I) -> &mut <Vec<'_, T> as Index<I>>::Output

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

impl<'i, T> IntoIterator for &'i Vec<'_, T>

Source§

type IntoIter = Iter<'i, T>

Which kind of iterator are we turning this into?
Source§

type Item = &'i T

The type of the elements being iterated over.
Source§

fn into_iter(self) -> <&'i Vec<'_, T> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'i, T> IntoIterator for &'i mut Vec<'_, T>

Source§

type IntoIter = IterMut<'i, T>

Which kind of iterator are we turning this into?
Source§

type Item = &'i mut T

The type of the elements being iterated over.
Source§

fn into_iter(self) -> <&'i mut Vec<'_, T> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'alloc, T> IntoIterator for Vec<'alloc, T>

Source§

type IntoIter = <Vec<'alloc, T, Bump> as IntoIterator>::IntoIter

Which kind of iterator are we turning this into?
Source§

type Item = T

The type of the elements being iterated over.
Source§

fn into_iter(self) -> <Vec<'alloc, T> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'alloc, T> PartialEq for Vec<'alloc, T>
where T: PartialEq,

Source§

fn eq(&self, other: &Vec<'alloc, T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> Serialize for Vec<'_, T>
where T: Serialize,

Source§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<'a, T> TakeIn<'a> for Vec<'a, T>

Source§

fn take_in<A>(&mut self, allocator_accessor: A) -> Self
where A: AllocatorAccessor<'a>,

Replace node with a dummy.
Source§

fn take_in_box<A>(&mut self, allocator_accessor: A) -> Box<'a, Self>
where A: AllocatorAccessor<'a>,

Replace node with a boxed dummy.
Source§

impl<'alloc, T> Eq for Vec<'alloc, T>
where T: Eq,

Source§

impl<'alloc, T> StructuralPartialEq for Vec<'alloc, T>

Source§

impl<T> Sync for Vec<'_, T>
where T: Sync,

SAFETY: Even though Bump is not Sync, we can make Vec<T> Sync if T is Sync because:

  1. No public methods allow access to the &Bump that Vec contains (in RawVec), so user cannot illegally obtain 2 &Bumps on different threads via Vec.

  2. All internal methods which access the &Bump take a &mut self. &mut Vec cannot be transferred across threads, and nor can an owned Vec (Vec is not Send). Therefore these methods taking &mut self can be sure they’re not operating on a Vec which has been moved across threads.

Note: Vec CANNOT be Send, even if T is Send, because that would allow 2 Vecs on different threads to both allocate into same arena simultaneously. Bump is not thread-safe, and this would be undefined behavior.

Auto Trait Implementations§

§

impl<'alloc, T> Freeze for Vec<'alloc, T>

§

impl<'alloc, T> !RefUnwindSafe for Vec<'alloc, T>

§

impl<'alloc, T> !Send for Vec<'alloc, T>

§

impl<'alloc, T> Unpin for Vec<'alloc, T>

§

impl<'alloc, T> !UnwindSafe for Vec<'alloc, T>

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<I, C> CompactStringExt for C
where I: AsRef<str>, C: IntoIterator<Item = I>,

Source§

fn concat_compact(self) -> CompactString

Concatenates all the items of a collection into a CompactString Read more
Source§

fn join_compact<S>(self, separator: S) -> CompactString
where S: AsRef<str>,

Joins all the items of a collection, placing a separator between them, forming a CompactString Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

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

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
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<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
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 underlined
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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.