summaryrefslogtreecommitdiffstats
path: root/vendor/tinyvec/src/array.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/tinyvec/src/array.rs')
-rw-r--r--vendor/tinyvec/src/array.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/tinyvec/src/array.rs b/vendor/tinyvec/src/array.rs
new file mode 100644
index 000000000..cc84aaf74
--- /dev/null
+++ b/vendor/tinyvec/src/array.rs
@@ -0,0 +1,48 @@
+/// A trait for types that are an array.
+///
+/// An "array", for our purposes, has the following properties:
+/// * Owns some number of elements.
+/// * The element type can be generic, but must implement [`Default`].
+/// * The capacity is fixed at compile time, based on the implementing type.
+/// * You can get a shared or mutable slice to the elements.
+///
+/// You are generally **not** expected to need to implement this yourself. It is
+/// already implemented for all the major array lengths (`0..=32` and the powers
+/// of 2 up to 4,096), or for all array lengths with the feature `rustc_1_55`.
+///
+/// **Additional lengths can easily be added upon request.**
+///
+/// ## Safety Reminder
+///
+/// Just a reminder: this trait is 100% safe, which means that `unsafe` code
+/// **must not** rely on an instance of this trait being correct.
+pub trait Array {
+ /// The type of the items in the thing.
+ type Item: Default;
+
+ /// The number of slots in the thing.
+ const CAPACITY: usize;
+
+ /// Gives a shared slice over the whole thing.
+ ///
+ /// A correct implementation will return a slice with a length equal to the
+ /// `CAPACITY` value.
+ fn as_slice(&self) -> &[Self::Item];
+
+ /// Gives a unique slice over the whole thing.
+ ///
+ /// A correct implementation will return a slice with a length equal to the
+ /// `CAPACITY` value.
+ fn as_slice_mut(&mut self) -> &mut [Self::Item];
+
+ /// Create a default-initialized instance of ourself, similar to the
+ /// [`Default`] trait, but implemented for the same range of sizes as
+ /// [`Array`].
+ fn default() -> Self;
+}
+
+#[cfg(feature = "rustc_1_55")]
+mod const_generic_impl;
+
+#[cfg(not(feature = "rustc_1_55"))]
+mod generated_impl;