cl_generic_vec/raw/
array.rs1use crate::{
2 raw::{Storage, StorageWithCapacity},
3 uninit_array,
4};
5use core::mem::MaybeUninit;
6
7use super::{AllocError, AllocResult};
8
9unsafe impl<T, const N: usize> StorageWithCapacity for [MaybeUninit<T>; N] {
10 fn with_capacity(capacity: usize) -> Self {
11 if capacity > N {
12 crate::raw::capacity::fixed_capacity_reserve_error(N, capacity)
13 }
14
15 uninit_array()
16 }
17
18 #[inline]
19 #[doc(hidden)]
20 #[allow(non_snake_case)]
21 fn __with_capacity__const_capacity_checked(capacity: usize, old_capacity: Option<usize>) -> Self {
22 match old_capacity {
23 Some(old_capacity) if old_capacity <= N => uninit_array(),
24 _ => Self::with_capacity(capacity),
25 }
26 }
27}
28
29unsafe impl<T, const N: usize> Storage for [MaybeUninit<T>; N] {
30 type Item = T;
31
32 #[doc(hidden)]
33 const CONST_CAPACITY: Option<usize> = Some(N);
34
35 fn reserve(&mut self, capacity: usize) {
36 if capacity > N {
37 crate::raw::capacity::fixed_capacity_reserve_error(N, capacity)
38 }
39 }
40
41 fn try_reserve(&mut self, capacity: usize) -> AllocResult {
42 if capacity <= N {
43 Ok(())
44 } else {
45 Err(AllocError)
46 }
47 }
48}