cl_generic_vec/raw/
array.rs

1use 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}