From 8cdfa445d6629ffef4cb84967ff7017654045bc2 Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 2 Jul 2025 18:36:06 -0600 Subject: chore: add vendor directory --- vendor/tinyvec/src/lib.rs | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 vendor/tinyvec/src/lib.rs (limited to 'vendor/tinyvec/src/lib.rs') diff --git a/vendor/tinyvec/src/lib.rs b/vendor/tinyvec/src/lib.rs new file mode 100644 index 00000000..fb558e71 --- /dev/null +++ b/vendor/tinyvec/src/lib.rs @@ -0,0 +1,112 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![forbid(unsafe_code)] +#![cfg_attr( + feature = "nightly_slice_partition_dedup", + feature(slice_partition_dedup) +)] +#![cfg_attr( + feature = "debugger_visualizer", + feature(debugger_visualizer), + debugger_visualizer(natvis_file = "../debug_metadata/tinyvec.natvis") +)] +#![cfg_attr(docsrs, feature(doc_cfg))] +#![warn(clippy::missing_inline_in_public_items)] +#![warn(clippy::must_use_candidate)] +#![warn(missing_docs)] +#![allow(clippy::borrow_deref_ref)] +#![allow(unused_imports)] +#![allow(unused_mut)] +#![allow(clippy::write_with_newline)] +#![allow(clippy::needless_return)] + +//! `tinyvec` provides 100% safe vec-like data structures. +//! +//! ## Provided Types +//! With no features enabled, this crate provides the [`ArrayVec`] type, which +//! is an array-backed storage. You can push values into the array and pop them +//! out of the array and so on. If the array is made to overflow it will panic. +//! +//! Similarly, there is also a [`SliceVec`] type available, which is a vec-like +//! that's backed by a slice you provide. You can add and remove elements, but +//! if you overflow the slice it will panic. +//! +//! With the `alloc` feature enabled, the crate also has a [`TinyVec`] type. +//! This is an enum type which is either an `Inline(ArrayVec)` or a `Heap(Vec)`. +//! If a `TinyVec` is `Inline` and would overflow it automatically transitions +//! itself into being `Heap` mode instead of a panic. +//! +//! All of this is done with no `unsafe` code within the crate. Technically the +//! `Vec` type from the standard library uses `unsafe` internally, but *this +//! crate* introduces no new `unsafe` code into your project. +//! +//! The limitation is that the element type of a vec from this crate must +//! support the [`Default`] trait. This means that this crate isn't suitable for +//! all situations, but a very surprising number of types do support `Default`. +//! +//! ## Other Features +//! * `grab_spare_slice` lets you get access to the "inactive" portions of an +//! ArrayVec. +//! * `serde` provides a `Serialize` and `Deserialize` implementation for +//! [`TinyVec`] and [`ArrayVec`] types, provided the inner item also has an +//! implementation. +//! * `borsh` provides a `BorshSerialize` and `BorshDeserialize` implementation +//! for [`TinyVec`] and [`ArrayVec`] types, provided the inner item also has +//! an implementation. +//! +//! ## API +//! The general goal of the crate is that, as much as possible, the vecs here +//! should be a "drop in" replacement for the standard library `Vec` type. We +//! strive to provide all of the `Vec` methods with the same names and +//! signatures. The exception is that the element type of some methods will have +//! a `Default` bound that's not part of the normal `Vec` type. +//! +//! The vecs here also have a few additional methods that aren't on the `Vec` +//! type. In this case, the names tend to be fairly long so that they are +//! unlikely to clash with any future methods added to `Vec`. +//! +//! ## Stability +//! * The `1.0` series of the crate works with Rustc `1.34.0` or later, though +//! you still need to have Rustc `1.36.0` to use the `alloc` feature. +//! * The `2.0` version of the crate is planned for some time after the +//! `min_const_generics` stuff becomes stable. This would greatly raise the +//! minimum rust version and also allow us to totally eliminate the need for +//! the `Array` trait. The actual usage of the crate is not expected to break +//! significantly in this transition. + +#[allow(unused_imports)] +use core::{ + borrow::{Borrow, BorrowMut}, + cmp::PartialEq, + convert::AsMut, + default::Default, + fmt::{ + Binary, Debug, Display, Formatter, LowerExp, LowerHex, Octal, Pointer, + UpperExp, UpperHex, + }, + hash::{Hash, Hasher}, + iter::{Extend, FromIterator, FusedIterator, IntoIterator, Iterator}, + mem::{needs_drop, replace}, + ops::{Deref, DerefMut, Index, IndexMut, RangeBounds}, + slice::SliceIndex, +}; + +#[cfg(feature = "alloc")] +#[doc(hidden)] // re-export for macros +pub extern crate alloc; + +mod array; +pub use array::*; + +mod arrayvec; +pub use arrayvec::*; + +mod arrayvec_drain; +pub use arrayvec_drain::*; + +mod slicevec; +pub use slicevec::*; + +#[cfg(feature = "alloc")] +mod tinyvec; +#[cfg(feature = "alloc")] +pub use crate::tinyvec::*; -- cgit v1.2.3