aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs53
1 files changed, 51 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 3aff40a..b2d6584 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -12,13 +12,25 @@
#![no_std]
#![cfg_attr(
feature = "nightly",
- feature(test, core_intrinsics, dropck_eyepatch, min_specialization, extend_one)
+ feature(
+ test,
+ core_intrinsics,
+ dropck_eyepatch,
+ min_specialization,
+ extend_one,
+ allocator_api,
+ slice_ptr_get,
+ nonnull_slice_from_raw_parts,
+ maybe_uninit_array_assume_init
+ )
)]
#![allow(
clippy::doc_markdown,
clippy::module_name_repetitions,
clippy::must_use_candidate,
- clippy::option_if_let_else
+ clippy::option_if_let_else,
+ clippy::redundant_else,
+ clippy::manual_map
)]
#![warn(missing_docs)]
#![warn(rust_2018_idioms)]
@@ -48,6 +60,11 @@ pub mod raw {
pub use inner::*;
#[cfg(feature = "rayon")]
+ /// [rayon]-based parallel iterator types for hash maps.
+ /// You will rarely need to interact with it directly unless you have need
+ /// to name one of the iterator types.
+ ///
+ /// [rayon]: https://docs.rs/rayon/1.0/rayon
pub mod rayon {
pub use crate::external_trait_impls::rayon::raw::*;
}
@@ -110,3 +127,35 @@ pub enum TryReserveError {
layout: alloc::alloc::Layout,
},
}
+
+/// The error type for [`RawTable::get_each_mut`](crate::raw::RawTable::get_each_mut),
+/// [`HashMap::get_each_mut`], and [`HashMap::get_each_key_value_mut`].
+#[cfg(feature = "nightly")]
+#[derive(Clone, PartialEq, Eq, Debug)]
+pub enum UnavailableMutError {
+ /// The requested entry is not present in the table.
+ Absent,
+ /// The requested entry is present, but a mutable reference to it was already created and
+ /// returned from this call to `get_each_mut` or `get_each_key_value_mut`.
+ ///
+ /// Includes the index of the existing mutable reference in the returned array.
+ Duplicate(usize),
+}
+
+/// Wrapper around `Bump` which allows it to be used as an allocator for
+/// `HashMap`, `HashSet` and `RawTable`.
+///
+/// `Bump` can be used directly without this wrapper on nightly if you enable
+/// the `allocator-api` feature of the `bumpalo` crate.
+#[cfg(feature = "bumpalo")]
+#[derive(Clone, Copy, Debug)]
+pub struct BumpWrapper<'a>(pub &'a bumpalo::Bump);
+
+#[cfg(feature = "bumpalo")]
+#[test]
+fn test_bumpalo() {
+ use bumpalo::Bump;
+ let bump = Bump::new();
+ let mut map = HashMap::new_in(BumpWrapper(&bump));
+ map.insert(0, 1);
+}