diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-02 18:36:06 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-02 18:36:06 -0600 |
| commit | 8cdfa445d6629ffef4cb84967ff7017654045bc2 (patch) | |
| tree | 22f0b0907c024c78d26a731e2e1f5219407d8102 /vendor/tinyvec/src/lib.rs | |
| parent | 4351c74c7c5f97156bc94d3a8549b9940ac80e3f (diff) | |
chore: add vendor directory
Diffstat (limited to 'vendor/tinyvec/src/lib.rs')
| -rw-r--r-- | vendor/tinyvec/src/lib.rs | 112 |
1 files changed, 112 insertions, 0 deletions
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::*;
|
