/// alignment. In other words, if `K` has size 16, `K.align_to(32)`
/// will *still* have size 16.
///
- /// # Panics
- ///
- /// Panics if the combination of `self.size()` and the given `align`
- /// violates the conditions listed in
+ /// Returns an error if the combination of `self.size()` and the given
+ /// `align` violates the conditions listed in
/// [`Layout::from_size_align`](#method.from_size_align).
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
- pub fn align_to(&self, align: usize) -> Self {
- Layout::from_size_align(self.size(), cmp::max(self.align(), align)).unwrap()
+ pub fn align_to(&self, align: usize) -> Result<Self, LayoutErr> {
+ Layout::from_size_align(self.size(), cmp::max(self.align(), align))
}
/// Returns the amount of padding we must insert after `self`
/// to be less than or equal to the alignment of the starting
/// address for the whole allocated block of memory. One way to
/// satisfy this constraint is to ensure `align <= self.align()`.
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
pub fn padding_needed_for(&self, align: usize) -> usize {
let len = self.size();
/// of each element in the array.
///
/// On arithmetic overflow, returns `LayoutErr`.
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
pub fn repeat(&self, n: usize) -> Result<(Self, usize), LayoutErr> {
let padded_size = self.size().checked_add(self.padding_needed_for(self.align()))
/// will be properly aligned. Note that the result layout will
/// satisfy the alignment properties of both `self` and `next`.
///
+ /// The resulting layout will be the same as that of a C struct containing
+ /// two fields with the layouts of `self` and `next`, in that order.
+ ///
/// Returns `Some((k, offset))`, where `k` is layout of the concatenated
/// record and `offset` is the relative location, in bytes, of the
/// start of the `next` embedded within the concatenated record
/// (assuming that the record itself starts at offset 0).
///
/// On arithmetic overflow, returns `LayoutErr`.
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
pub fn extend(&self, next: Self) -> Result<(Self, usize), LayoutErr> {
let new_align = cmp::max(self.align(), next.align());
/// aligned.
///
/// On arithmetic overflow, returns `LayoutErr`.
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
pub fn repeat_packed(&self, n: usize) -> Result<Self, LayoutErr> {
let size = self.size().checked_mul(n).ok_or(LayoutErr { private: () })?;
/// padding is inserted, the alignment of `next` is irrelevant,
/// and is not incorporated *at all* into the resulting layout.
///
- /// Returns `(k, offset)`, where `k` is layout of the concatenated
- /// record and `offset` is the relative location, in bytes, of the
- /// start of the `next` embedded within the concatenated record
- /// (assuming that the record itself starts at offset 0).
- ///
- /// (The `offset` is always the same as `self.size()`; we use this
- /// signature out of convenience in matching the signature of
- /// `extend`.)
- ///
/// On arithmetic overflow, returns `LayoutErr`.
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
- pub fn extend_packed(&self, next: Self) -> Result<(Self, usize), LayoutErr> {
+ pub fn extend_packed(&self, next: Self) -> Result<Self, LayoutErr> {
let new_size = self.size().checked_add(next.size())
.ok_or(LayoutErr { private: () })?;
let layout = Layout::from_size_align(new_size, self.align())?;
- Ok((layout, self.size()))
+ Ok(layout)
}
/// Creates a layout describing the record for a `[T; n]`.
///
/// On arithmetic overflow, returns `LayoutErr`.
- #[unstable(feature = "allocator_api", issue = "32838")]
+ #[unstable(feature = "alloc_layout_extra", issue = "55724")]
#[inline]
pub fn array<T>(n: usize) -> Result<Self, LayoutErr> {
Layout::new::<T>()