3 #![stable(feature = "rust1", since = "1.0.0")]
5 #[cfg(not(no_global_oom_handling))]
7 #[cfg(not(no_global_oom_handling))]
9 #[cfg(not(no_global_oom_handling))]
11 #[cfg(not(no_global_oom_handling))]
14 #[cfg(not(no_global_oom_handling))]
15 #[stable(feature = "rust1", since = "1.0.0")]
17 //! An ordered map based on a B-Tree.
18 #[stable(feature = "rust1", since = "1.0.0")]
19 pub use super::btree::map::*;
22 #[cfg(not(no_global_oom_handling))]
23 #[stable(feature = "rust1", since = "1.0.0")]
25 //! An ordered set based on a B-Tree.
26 #[stable(feature = "rust1", since = "1.0.0")]
27 pub use super::btree::set::*;
30 #[cfg(not(no_global_oom_handling))]
31 #[stable(feature = "rust1", since = "1.0.0")]
33 pub use binary_heap::BinaryHeap;
35 #[cfg(not(no_global_oom_handling))]
36 #[stable(feature = "rust1", since = "1.0.0")]
38 pub use btree_map::BTreeMap;
40 #[cfg(not(no_global_oom_handling))]
41 #[stable(feature = "rust1", since = "1.0.0")]
43 pub use btree_set::BTreeSet;
45 #[cfg(not(no_global_oom_handling))]
46 #[stable(feature = "rust1", since = "1.0.0")]
48 pub use linked_list::LinkedList;
50 #[cfg(not(no_global_oom_handling))]
51 #[stable(feature = "rust1", since = "1.0.0")]
53 pub use vec_deque::VecDeque;
55 use crate::alloc::{Layout, LayoutError};
56 use core::fmt::Display;
58 /// The error type for `try_reserve` methods.
59 #[derive(Clone, PartialEq, Eq, Debug)]
60 #[stable(feature = "try_reserve", since = "1.57.0")]
61 pub struct TryReserveError {
62 kind: TryReserveErrorKind,
65 impl TryReserveError {
66 /// Details about the allocation that caused the error
70 feature = "try_reserve_kind",
71 reason = "Uncertain how much info should be exposed",
74 pub fn kind(&self) -> TryReserveErrorKind {
79 /// Details of the allocation that caused a `TryReserveError`
80 #[derive(Clone, PartialEq, Eq, Debug)]
82 feature = "try_reserve_kind",
83 reason = "Uncertain how much info should be exposed",
86 pub enum TryReserveErrorKind {
87 /// Error due to the computed capacity exceeding the collection's maximum
88 /// (usually `isize::MAX` bytes).
91 /// The memory allocator returned an error
93 /// The layout of allocation request that failed
98 feature = "container_error_extra",
101 Enable exposing the allocator’s custom error value \
102 if an associated type is added in the future: \
103 https://github.com/rust-lang/wg-allocators/issues/23"
110 feature = "try_reserve_kind",
111 reason = "Uncertain how much info should be exposed",
114 impl From<TryReserveErrorKind> for TryReserveError {
116 fn from(kind: TryReserveErrorKind) -> Self {
121 #[unstable(feature = "try_reserve_kind", reason = "new API", issue = "48043")]
122 impl From<LayoutError> for TryReserveErrorKind {
123 /// Always evaluates to [`TryReserveErrorKind::CapacityOverflow`].
125 fn from(_: LayoutError) -> Self {
126 TryReserveErrorKind::CapacityOverflow
130 #[stable(feature = "try_reserve", since = "1.57.0")]
131 impl Display for TryReserveError {
134 fmt: &mut core::fmt::Formatter<'_>,
135 ) -> core::result::Result<(), core::fmt::Error> {
136 fmt.write_str("memory allocation failed")?;
137 let reason = match self.kind {
138 TryReserveErrorKind::CapacityOverflow => {
139 " because the computed capacity exceeded the collection's maximum"
141 TryReserveErrorKind::AllocError { .. } => {
142 " because the memory allocator returned an error"
145 fmt.write_str(reason)
149 /// An intermediate trait for specialization of `Extend`.
151 trait SpecExtend<I: IntoIterator> {
152 /// Extends `self` with the contents of the given iterator.
153 fn spec_extend(&mut self, iter: I);
156 #[stable(feature = "try_reserve", since = "1.57.0")]
157 impl core::error::Error for TryReserveError {}